//Created by Victor Metelin aka Crazy Driver

/*
Как использовать:
1. В Вашем HTML документе в разделе <head> необходимо внедрить этот скрипт
2. Где-нибудь в разделе <body> нужно поставить: <div id='hint' style='position: absolute; visibility: hidden;'></div>
3. Для активации хинта нужно вызвать showHint('текст хинта'), для деактивации hideHint()
Например <img onMouseOver='showHint("Это картинка");' onMouseOut='hideHint();'>
*/

//---------------------Настройки хинта
var hintDivId="hint";
var hintWidth=300;			//Ширина хинта (Высота изменяется автоматически в зависимости от содержимого)
var hintMouseDelta=5;		//Допустимое отклонение мыши, когда хинт не прячется
var hintDeltaX=-30;			//Смещение хинта относительно мыши по X
var hintDeltaY=40;			//Смещение хинта относительно мыши по Y
var hintDelay=200;			//Задержка перед появлением хинта (в милисекундах)
var hintStyle="padding: 3; font-family: Times New Roman; color: #000000; font-size: 12px;";//Стиль хинта
//--------------------Конец настроек хинта

var hintPreDecor="<table style='border-style: solid; border-width: 1px; background-color: #92A59F;  border-color: #000000;' cellspacing='0' ><tr><td style='"+hintStyle+"' width='"+hintWidth+"' valign='top'>";//HTML перед текстом хинта
var hintAfterDecor="</td></tr></table>";//HTML после текста хинта


//--------------------Далее менять не рекомендуется
var hintText;
var isShowHint=false;
var hintX=0;
var hintY=0;
var hintTimeout=false;

document.onmousemove = function(event) {
 if(!isShowHint) return;
 var event = event || window.event;
 if(Math.abs(hintX-defPosition(event).x)<hintMouseDelta && Math.abs(hintY-defPosition(event).y)<hintMouseDelta) return;
 hintX=defPosition(event).x;
 hintY=defPosition(event).y;
 deleteHint();
}

function printHint(x, y){
 if(!isShowHint) return;
 var div=document.getElementById(hintDivId);
 div.style.width=hintWidth;
 div.style.left=x+hintDeltaX;
 div.style.top=y+hintDeltaY;
 div.innerHTML=hintText;
 div.style.visibility='visible';
}

function deleteHint(){
 if(hintTimeout) clearTimeout(hintTimeout);
 var div=document.getElementById(hintDivId);
 div.style.visibility='hidden';
 div.innerHTML='';
 div.style.width=0;
 div.style.height=0;
 div.style.left=0;
 div.style.top=0;

 if(isShowHint){
  hintTimeout=setTimeout('printHint(hintX, hintY);', hintDelay);
 }
}

function showHint(text){
 var div=document.getElementById(hintDivId);
 if(!div) return;
 hintText=hintPreDecor+text+hintAfterDecor;
 isShowHint=true;
 deleteHint();
}

function hideHint(){
 isShowHint=false;
 if(hintTimeout) clearTimeout(hintTimeout);
 var div=document.getElementById(hintDivId);
 div.visibility='hidden';
 div.innerHTML='';
 div.style.width=0;
 div.style.height=0;
 div.style.left=0;
 div.style.top=0;

}

function defPosition(event) {
      var x = y = 0;
      if (document.attachEvent != null) {
            x = window.event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
            y = window.event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
      } else if (!document.attachEvent && document.addEventListener) {
            x = event.clientX + window.scrollX;
            y = event.clientY + window.scrollY;
      } else {

      }
      return {x:x, y:y};
}
