
var hints = [
{
text: /(\s)(хисси[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "hissi"
}, {
text: /(\s)(сенничитэ[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "sennichite"
}, {
text: /(\s)(какугавари[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "kakugawari"
}, {
text: /(\s)(накаби[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "nakabisha"
}, {
text: /(\s)(иби[шс][^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "ibisha"
}, {
text: /(\s)([йё][о]?кофудори[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "yokofudori"
}, {
text: /(\s)(фуриби[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "furibisha"
}, {
text: /(\s)(мукаиби[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "mukaibisha"
}, {
text: /(\s)(анагум[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "anaguma"
}, {
text: /(\s)(мино)([\s.,!?""'';:*}~<>%-+\)])/gi,
name: "mino"
}, {
text: /(\s)(ягур[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "yagura"
}, {
text: /(\s)(\Sикенби[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "shikenbisha"
}, {
text: /(\s)(сангенби[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "sangenbisha"
}, {
text: /(\s)(а[ий]гакари[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "aigakari"
}, {
text: /(\s)(фуригом[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "furigoma"
}, {
text: /(\s)(цумэ[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "tsume"
}, {
text: /(\s)(исид[^\s.,!?""'';:*}~<>%-+\)]*)()/gi,
name: "ishida"
}
];

function launchByTime()
{
	setTimeout("searchWords()", 1);
}

function searchWords()
{
	var content = document.getElementById("content_body");
	if (!document.getElementById("hintbox"))
	{
		var div = document.createElement('div');
		div.innerHTML = "<div id=\"hintbox\"></div>";
		content.appendChild(div); 
	}
	
	var tags = content.getElementsByTagName("p");
      
    for(e = 0; e < tags.length; e++)
    {
    	var txt = new String(tags[e].innerHTML);
		for(i = 0; i < hints.length; i++)
		{
			txt = txt.replace(hints[i].text, "$1<span id=\"hint" + hints[i].name + "\" class=\"hintspan\">$2<sup>?</sup></span>$3");		
		}
		tags[e].innerHTML = txt;
    }

	hintsForLinks();
	
}

setGlobalOnLoad(launchByTime);

var curHintId = null;

if(!window.XMLHttpRequest && window.ActiveXObject)
   var XMLHttpRequest = function() { return new ActiveXObject("Microsoft.XMLHTTP"); }

var mouse = {
   x : function(e)
   {
      if (window.event)
         return window.event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
	  else if (window.captureEvents)
         return e.pageX;
      else
         return null; 
   },
   y : function(e)
   {
      if (window.event)
	     //return window.event.clientY + document.body.scrollTop;
         return window.event.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
      else if (window.captureEvents)
         return e.pageY;
      else
         return null;   
   }
}

function hintsForLinks()
{
   if (window.XMLHttpRequest)
   {
      var hintbox = document.getElementById("hintbox");
      var allLinks = document.getElementsByTagName("span");
      
      var links = new Array();
      var e = 0;
      for(i = 0; i < allLinks.length; i++)
      {
         if (allLinks[i].id.match(/hint\S+/i))
         {
            links[e] = allLinks[i];
            e++;
         }
      }
      
      for(i = 0; i < links.length; i++)
      {
         links[i].onmouseover = function()
         {
            getXMLDoc("../_hints/" + this.id.replace("hint", "") + ".txt");
            curHintId = this.id;
         }
         links[i].onmouseout = function()
         {
            hintbox.style.left = "-1000px";
            hintbox.innerHTML = "";
         }
         links[i].onmousemove = function(e)
         {
            if (mouse.x(e) && hintbox.innerHTML != "")
            {
               var dx = (document.body.clientWidth - mouse.x(e) + document.body.scrollLeft < hintbox.offsetWidth) ? hintbox.offsetWidth + 15 : 0;
               var dy = (document.body.clientHeight - mouse.y(e) + document.body.scrollTop < hintbox.offsetHeight) ? hintbox.offsetHeight + 15 : 0;
               var x = mouse.x(e) + 10 - dx;
               var y = mouse.y(e) + 10 - dy;
               hintbox.style.left = (x - document.body.scrollLeft > 0) ? x : document.body.scrollLeft;
               hintbox.style.top = (y - document.body.scrollTop > 0) ? y : document.body.scrollTop;
            }
         }
      }
   }
}

function getXMLDoc(url)
{
   try
   {
      req = new XMLHttpRequest();
      if (req)
      {
         req.onreadystatechange = function () 
         {
            if (req.readyState == 4)
            {
               if (req.status == 200)
               {
                  var hintbox = document.getElementById("hintbox");
                  hintbox.innerHTML = req.responseText;
                  try
                  {
                     document.getElementById(curHintId).fireEvent("onmousemove");
                  }
                  catch(e)
                  {
                     hintbox.style.left = mouse.x(e) + 10;
                     hintbox.style.top = mouse.y(e) + 10;
                  }
               }
            }
         }
         req.open("GET", url, true);
         req.send("");
      }
   }
   catch(e) 
   {
      return;
   }
}

function setGlobalOnLoad(f) {
   var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null
   if (root){
      if(root.addEventListener) root.addEventListener("load", f, false)
      else if(root.attachEvent) root.attachEvent("onload", f)
   } else {
      if(typeof window.onload == 'function') {
         var existing = window.onload
         window.onload = function() {
            existing()
            f()
         }
      } else {
         window.onload = f
      }
   }
}
