/*
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"
	createSubdiv: null, // дочерний 
	
	//alert (tl);
	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 =  "999";

		tooltip.createEl.className = 'shadowed';

		// Добавляем новый нод в тело
		document.body.appendChild(tooltip.createEl);

		// удаляем дочерние элементы
		var countChildEl = tooltip.createEl.childNodes.length;
		for (var i = 0; i < countChildEl; i++) 
		{
			tooltip.createEl.removeChild(tooltip.createEl.childNodes[0]);
		}	

		var shadowed_tl = document.createElement("div");
		shadowed_tl.className = "tl";
		tooltip.createEl.appendChild(shadowed_tl);

		var shadowed_t = document.createElement("div");
		shadowed_t.className = "t";
		tooltip.createEl.appendChild(shadowed_t);

		var shadowed_tr = document.createElement("div");
		shadowed_tr.className = "tr";
		tooltip.createEl.appendChild(shadowed_tr);

		var shadowed_l = document.createElement("div");
		shadowed_l.className = "l";
		tooltip.createEl.appendChild(shadowed_l);

		var shadowed_r = document.createElement("div");
		shadowed_r.className = "r";
		tooltip.createEl.appendChild(shadowed_r);

		var shadowed_bl = document.createElement("div");
		shadowed_bl.className = "bl";
		tooltip.createEl.appendChild(shadowed_bl);

		var shadowed_b = document.createElement("div");
		shadowed_b.className = "b";
		tooltip.createEl.appendChild(shadowed_b);

		var shadowed_br = document.createElement("div");
		shadowed_br.className = "br";
		tooltip.createEl.appendChild(shadowed_br);

		// рисуем хвост
		var shadow_tail = document.createElement("div");
		shadow_tail.className = "shadow_tail";
		shadow_tail.style.left = "3px";
		shadow_tail.style.bottom = "-29px";
		shadow_tail.style.width = "13px";
		var shadow_tail_img = document.createElement("img");
		shadow_tail_img.setAttribute("src", "/admin/images/shadow_tail.gif");
		shadow_tail.appendChild(shadow_tail_img);
		tooltip.createEl.appendChild(shadow_tail);

		tooltip.createSubdiv = document.createElement("div");
		tooltip.createEl.appendChild(tooltip.createSubdiv);
		
		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 />");
		}
		/*
		else{

			if (tooltip.createEl.firstChild) tooltip.createSubdiv.removeChild(tooltip.createSubdiv.firstChild);
			tooltip.createSubdiv.appendChild(document.createTextNode(s));
		}
		*/
		
		if (tooltip.createSubdiv.firstChild) tooltip.createSubdiv.removeChild(tooltip.createSubdiv.firstChild);
		tooltip.createSubdiv.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";
		tooltip.createEl.style.width = "auto";

		if (tooltip.options.mark_newline && tooltip.createSubdiv.firstChild)
		{
			tooltip.createSubdiv.removeChild(tooltip.createSubdiv.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;

		if (tooltip.createEl.lastChild)
		{
			widthElement = tooltip.createEl.lastChild.offsetWidth;
		}
		else
		{
			widthElement = 0;
		}
		

		// если ширина блока подсказки больше минимального значени, ограничиваем по ширине
		tooltip.createEl.style.width = tooltip.options.max_width && widthElement >= tooltip.options.max_width ? tooltip.options.max_width + "px" : "auto";

		if (tooltip.createEl.lastChild)
		{
			heightElement = tooltip.createEl.lastChild.offsetHeight;
		}
		else
		{
			heightElement = 0;
		}

		tooltip.createEl.style.left = x -25 + "px"; // относительная позиция по оси X
		tooltip.createEl.style.top = y -(25 + 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;
}
