function stopError(){
	return true;
}
// отключение вывода сообщений об ошибках
window.onerror = stopError;

// функция вызывается при загрузке страницы
window.onload = function(e){
	// если браузер поддерживает DOM и создание элементов, то мы запускаем механизм создания tooltip'а
	if (document.createElement) tooltip.d();
}

// объект tooltip
tooltip = {
	// создание слоя, в котором будет находится текст подсказки (точнее, TextNode, содержащий текст)
	t: document.createElement("DIV"),
	
	// таймер
	c: null,
	
	// флаг, указывающий показана ли сейчас на экране подсказка
	g: false,

	// обработчик события onMouseMove
	m: function(e){
		// если подсказка была вызвана на экран
		if (tooltip.g){
			// важно! определяем канву, учитывая режим совместимости в IE 6
			oCanvas = document.getElementsByTagName(
			(document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY"
			)[0];
			// x-координата, где произошёл вызов подсказки
			x = window.event ? event.clientX + oCanvas.scrollLeft : e.pageX;
			// y-координата, где произошёл вызов подсказки
			y = window.event ? event.clientY + oCanvas.scrollTop : e.pageY;
			// вывод подсказки на экран (задание координат)
			tooltip.a(x, y);
		}
	},

	d: function(){
		// установка атрибута id со значением tooltip (который описан у нас в CSS)
		tooltip.t.setAttribute("id", "tooltip");
		// добавление к элементу body дочернего объекта tooltip
		document.body.appendChild(tooltip.t);
		/* далее мы считываем в массив все элементы, затем у тех,		которые имеют HTML атрибуты title и alt задаём новый атрибут text (текст подсказки);		мы также задаём обработчики событий onMouseOver и onMouseOut */
		a = (document.all) ? document.all : document.getElementsByTagName("*");
		aLength = a.length;
		for (var i = 0; i < aLength; i++){
			if (a[i].getAttribute("title")){
				a[i].setAttribute("text", a[i].getAttribute("title"));
				a[i].removeAttribute("title");
				if (a[i].getAttribute("alt") && a[i].complete) a[i].removeAttribute("alt");
				tooltip.l(a[i], "mouseover", tooltip.s);
				tooltip.l(a[i], "mouseout", tooltip.h);
			}else
				if (a[i].getAttribute("alt") && a[i].complete){
					a[i].setAttribute("text", a[i].getAttribute("alt"));
					a[i].removeAttribute("alt");
					tooltip.l(a[i], "mouseover", tooltip.s);
					tooltip.l(a[i], "mouseout", tooltip.h);
				}
		}
		// задаём для документа обработчик события onMouseMove
		document.onmousemove = tooltip.m;
		// прячем подсказку при скроллинге
		window.onscroll = tooltip.h;
	},

	// подготавливаем подсказку для вывода на экран
	s: function(e){
		// получаем объект, у которого будет показана подсказка
		d = (window.event) ? window.event.srcElement : e.currentTarget;
		// нелишняя проверка на наличее свойства text
		if (!d.getAttribute("text")) return;
		/* добавляем к элементу t (слой) новый TextNode, содержащий текст,		взятый из свойства text активного объекта */
		tooltip.t.appendChild(document.createTextNode(d.getAttribute("text")));
		// показываем подсказку с задержкой в 0,5 секунды
		tooltip.c = setTimeout("tooltip.t.style.visibility = 'visible';", 500);
		// устанавливаем флаг, сигнализирующий о том, что подсказка у нас на экране
		tooltip.g = true;
	},

	// удаляем подсказку с экрана
	h: function(e){
		// прячем подсказку
		tooltip.t.style.visibility = "hidden";
		// удаляем у слоя с подсказкой первый дочерний объект (TextNode с текстом)
		if (tooltip.t.firstChild) tooltip.t.removeChild(tooltip.t.firstChild);
		// убираем задержку
		clearTimeout(tooltip.c);
		// устанавливаем флаг
		tooltip.g = false;
		// с глаз долой…
		tooltip.a(-99, -99);
	},

	// делаем так, чтобы элементы с title и alt нужным образом реагировали на события onMouseOver и onMouseOut
	l: function(o, e, a){
		if (o.addEventListener) o.addEventListener(e, a, true);
		else
			if (o.attachEvent) o.attachEvent("on" + e, a);
			else
				return null;
	},

	// устанавливаем координаты всплывающей подсказки
	a: function(x, y){
		// x-координата
		tooltip.t.style.left = x + 8 + "px";
		// y-координата
		tooltip.t.style.top  = y + 8 + "px";
	}
}
<!--
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
-->