// ==UserScript==
// @name koldunschik_with_hostname
// @version 1 for Opera 9 update
// @author Kolja Dubr, edited by Denis Ivanov
// @description For getting some information about Yandex search
// @exclude *
// @include http://*.yandex.ru/yandsearch*
// @ujs:modified 25.01.2006
// ==/UserScript==


document.addEventListener('load', kld_checkyandex, true);

document.addEventListener('load', hostname_add, true);

var kld_wnd;
function kld_checkyandex() {
   kld_wnd = document;
   if (kld_wnd.location.href.match(/yandsearch|yandpage/)) {
      var alllinks = kld_wnd.getElementsByTagName('a');
      for (var i = 0; i<alllinks.length; i++) {
         var clink = alllinks[i];
         if (clink.href.match(/reqtext\=/) && !clink.href.match(/slovari\.yandex\.ru/)) {
            kld_add(clink.href);
            return true;
         }
      }
   }
   return true;
}

function kld_add(str) {
   if (kld_wnd.getElementById('kld_koldunschik')) return true;
   str_a = str.match(/reqtext\=[^&]+/);
   if (str_a) str = str_a[0].replace(/reqtext\=/, '');
   else alert("ERROR, please, contact developer"+str); //Например, есть подстава со словарями. Наверняка есть еще какие-то
   var req = winDecodeURIComponent(str);
   var refblock = kld_getRefBlock().appendChild(kld_wnd.createElement('div'));
   refblock.innerHTML='&#1050;&#1086;&#1083;&#1076;&#1091;&#1085;&#1097;&#1080;&#1082;: ';
   var result_a = refblock.appendChild(kld_wnd.createElement('a'));
   result_a.setAttribute('onclick', 'kld_copyToSearchString(this)');
   result_a.appendChild(kld_wnd.createTextNode(req));
   result_a.style.cursor = 'pointer';
   result_a.style.color = '#00F';
   result_a.id = 'kld_koldunschik';
   return false;
}

function hostname_add() {
   if (kld_wnd.getElementById('hostname_div')) return true;
   var refblock = kld_getRefBlock().appendChild(kld_wnd.createElement('div'))
   refblock.innerHTML='&#1057;&#1077;&#1088;&#1074;&#1077;&#1088;: ';
   var result_b = refblock.appendChild(kld_wnd.createElement('span'));
   var hostname_url='/cgi-bin/hostname?r='+ Math.random();
   loadhostname(hostname_url,result_b);
   result_b.id = 'hostname_div';
   return true;
}

function gethostname(xmlhttp,result_b) {
	var hostname_status=0;
	while (hostname_status!=4)
	{
		hostname_status=xmlhttp.readyState;
	}
	var result_d=result_b.appendChild(kld_wnd.createElement('span'));
	result_d.appendChild(kld_wnd.createTextNode(xmlhttp.responseText));
	result_d.style.color = '#060';
}

function loadhostname(url,result_b)
{
var xmlhttp=new XMLHttpRequest();
if (xmlhttp!=null) {
  xmlhttp.open("GET",url,true);
  xmlhttp.send(null);
  xmlhttp.onreadystatechange = gethostname(xmlhttp,result_b);
  }
}

function kld_copyToSearchString(node) {
   kld_getSearchString().value = node.firstChild.data;
}

function kld_getRefBlock() {
   var allblocks = kld_wnd.getElementsByTagName('div');
   for (var i = 0; i< allblocks.length; i++) {
      var cblock = allblocks[i];
      if (cblock.className == 'refblock') return cblock;
   }
}

function kld_getSearchString() {
   var allinps = kld_wnd.getElementsByTagName('input');
   for (var i = 0; i<allinps.length; i++) {
      var cinp = allinps[i];
      if (cinp.name == 'text') return cinp;
   }
   return false;
}
     function winDecodeURIComponent(str) {
        var winalpha = {
            E0 : '%D0%B0', E1 : '%D0%B1', E2 : '%D0%B2', E3 : '%D0%B3', 
            E4 : '%D0%B4', E5 : '%D0%B5', B8 : '%D1%91', E6 : '%D0%B6', 
            E7 : '%D0%B7', E8 : '%D0%B8', E9 : '%D0%B9', EA : '%D0%BA', 
            EB : '%D0%BB', EC : '%D0%BC', ED : '%D0%BD', EE : '%D0%BE', 
            EF : '%D0%BF', F0 : '%D1%80', F1 : '%D1%81', F2 : '%D1%82', 
            F3 : '%D1%83', F4 : '%D1%84', F5 : '%D1%85', F6 : '%D1%86', 
            F7 : '%D1%87', F8 : '%D1%88', F9 : '%D1%89', FA : '%D1%8A', 
            FB : '%D1%8B', FC : '%D1%8C', FD : '%D1%8D', FE : '%D1%8E', 
            FF : '%D1%8F', C0 : '%D0%90', C1 : '%D0%91', C2 : '%D0%92', 
            C3 : '%D0%93', C4 : '%D0%94', C5 : '%D0%95', A8 : '%D0%81', 
            C6 : '%D0%96', C7 : '%D0%97', C8 : '%D0%98', C9 : '%D0%99', 
            CA : '%D0%9A', CB : '%D0%9B', CC : '%D0%9C', CD : '%D0%9D', 
            CE : '%D0%9E', CF : '%D0%9F', D0 : '%D0%A0', D1 : '%D0%A1', 
            D2 : '%D0%A2', D3 : '%D0%A3', D4 : '%D0%A4', D5 : '%D0%A5', 
            D6 : '%D0%A6', D7 : '%D0%A7', D8 : '%D0%A8', D9 : '%D0%A9', 
            DA : '%D0%AA', DB : '%D0%AB', DC : '%D0%AC', DD : '%D0%AD', 
            DE : '%D0%AE', DF : '%D0%AF'
        }
        str = str.replace(/%/g, '$');
        for (var i in winalpha) {
           str = str.replace(new RegExp('[\$]'+i, 'g'), winalpha[i]);
        }
        str = str.replace(/\$/g, '%');
        str = decodeURIComponent(str);
        return str;
     }

function getTopWin () {
    var windowManager = Components. classes ['@mozilla.org/appshell/window-mediator;1']. getService();
    var windowManagerInterface = windowManager.QueryInterface (Components. interfaces. nsIWindowMediator);
    var topWindowOfType = windowManagerInterface.getMostRecentWindow ("navigator:browser");
    if (topWindowOfType) {return topWindowOfType;}
    return null;
}

function getContent ()  {
    var cont = getTopWin (). getBrowser (). contentDocument;
    var c2 = cont;
    try {cont = new XPCNativeWrapper (cont). wrappedJSObject;} catch(e) {}
    if (!cont) cont = c2;
    return cont;
}
