// ==UserScript==
// @name SFront
// @version 1.4
// @author Kolyaj / Denis Ivanov
// @description Shows and switches the Front-Server, that generated the current Yandex SERP. See upyrj.ya.ru/replies.xml?item_no=8203
// @include http://*.yandex.ru/yandsearch*
// @include http://yandex.ru/yandsearch*
// @ujs:modified 26.02.2009
// ==/UserScript==
;
function kolyaj_getRefBlock() {
   var allblocks = document.getElementsByTagName('div');
   for (var i = 0; i< allblocks.length; i++) {
      var cblock = allblocks[i];
      if (cblock.className == 'refblock') return cblock;
   }
}

function getCookie(c_name)
		{
			if (document.cookie.length>0)
			{
				c_start=document.cookie.indexOf(c_name + '=');
				if (c_start!=-1)
				{
					c_start=c_start + c_name.length+1;
					c_end=document.cookie.indexOf(';',c_start);
					if (c_end==-1) c_end=document.cookie.length;
					return unescape(document.cookie.substring(c_start,c_end));
				}
			}
			return '';
		}

function showHost(){

var refblock = kolyaj_getRefBlock();
if (refblock) refblock = refblock.appendChild(document.createElement('div'));

var XHR = {
  synchron: function(url, method, data) {
    method = method || 'get';
    var tsprt = this.getTransport();
    if (tsprt) {
      tsprt.open(method, url, false);
      tsprt.send((method == 'post' && data) || null);
      if (tsprt.status == 200)
        return tsprt.responseText;
    }
  },

  getTransport: function() {
    try {
      return new XMLHttpRequest();
    } catch (e) {
      try {
        return new ActiveXObject('Msxml2.XMLHTTP');
      } catch (e) {
        try {
          return new ActiveXObject('Microsoft.XMLHTTP');
        } catch (e) {
          return false;
        }
      }
    }
  }
};

/*var hostname = XHR.synchron('/cgi-bin/hostname?r=' + Math.random());*/

var hostname = document.documentElement.innerHTML.match(/<!--\s*(sfront[\S]+)/)[1];

var hrefs = Array();
current_href=document.location.href;
hrefs[0]=current_href.replace(/http\:\/\/[a-z0-9\.]+andex/,'http://yandex');
hrefs[0]==current_href ? refblock.innerHTML+='(&ndash;) ' : refblock.innerHTML+='<a href="'+ hrefs[0] +'">(&ndash;)</a> ';
hrefs[1]=current_href.replace(/http\:\/\/[a-z0-9\.]+andex/,'http://buki.yandex');
hrefs[1]==current_href ? refblock.innerHTML+='(&#1073;) ' : refblock.innerHTML+='<a href="'+ hrefs[1] +'">(&#1073;)</a> ';
for (i=2; i<6; i++) {
	hrefs[i]=current_href.replace(/http\:\/\/[a-z0-9\.]+andex/,'http://www'+i+'.yandex');
	hrefs[i]==current_href ? refblock.innerHTML+='('+i+') ' : refblock.innerHTML+='<a href="'+ hrefs[i] +'">('+i+')</a> ';
}

refblock.innerHTML+='&nbsp; &#1089;&#1077;&#1088;&#1074;&#1077;&#1088;: <span style="color:#060">' + hostname +'.yandex.ru</span> ';

refblock.innerHTML+='&nbsp; &#1088;&#1077;&#1075;&#1080;&#1086;&#1085;: ';

var current_rid = 0;
if (getCookie('yandex_gid')) current_rid = getCookie('yandex_gid');

var regions = Array();

var regions_list;
regions[0] = '(&#150;)';
regions[213] = '&#1084;&#1089;&#1082;';
regions[2] = '&#1089;&#1087;&#1073;';
/** Add by Knave **/
regions[11070] = '&#1082;&#1086;';
regions[46] = '&#1082;&#1088;&#1074;';
regions[11071] = '&#1082;&#1088;&#1095;';

if (regions_list = getCookie('yandex_gid_list'))
{
	regions_list = regions_list.split(',');
	for (reg_id in regions_list) regions[regions_list[reg_id]] = '('+regions_list[reg_id]+')';
}
regions[0] = '(&#150;)';
regions[213] = '&#1084;&#1089;&#1082;';
regions[2] = '&#1089;&#1087;&#1073;';
/** Add by Knave **/
regions[11070] = '&#1082;&#1086;';
regions[46] = '&#1082;&#1088;&#1074;';
regions[11071] = '&#1082;&#1088;&#1095;';

var year = 2021;

for (reg_id in regions)
{
	year = 2021;
	if (reg_id == 0) year = 2001;
	reg_id!=current_rid ? refblock.innerHTML+= '<a href="#" onclick="document.cookie=\'yandex_gid='+reg_id+'; expires=Sat, 01 Jan '+year+' 00:00:10 GMT; path=/; domain=yandex.ru\'; window.location.reload(); return false">'+regions[reg_id]+'</a> ' : refblock.innerHTML+= ''+regions[reg_id] + ' ';
}

if (current_rid == 0) current_rid = '';

refblock.innerHTML+= '<a href="#" onclick="var rid=prompt(\'ID &#1088;&#1077;&#1075;&#1080;&#1086;&#1085;&#1072; \',\''+current_rid+'\'); if (rid) {document.cookie=\'yandex_gid=\'+rid+\'; expires=Sat, 01 Jan 2021 00:00:10 GMT; path=/; domain=yandex.ru\'; window.location.reload();} return false">&#1076;&#1088;&#1091;&#1075;&#1086;&#1081;</a>';
if (typeof(regions[current_rid])=='undefined' && current_rid != '') refblock.innerHTML+= ' (' + current_rid + ') ';

var editregions = '';
editregions+= 'if (gid_list = prompt(\'&#1057;&#1087;&#1080;&#1089;&#1086;&#1082; ID &#1088;&#1077;&#1075;&#1080;&#1086;&#1085;&#1086;&#1074; (&#1095;&#1077;&#1088;&#1077;&#1079; &#1079;&#1072;&#1087;&#1103;&#1090;&#1091;&#1102;)\',\''+regions_list+'\')) {';
editregions+= 'document.cookie=\'yandex_gid_list=\'+gid_list+\'; expires=Sat, 01 Jan 2021 00:00:10 GMT; path=/; domain=yandex.ru\';';
editregions+= 'window.location.reload();';
editregions+= '}; return(false);';

var version="1.4";

refblock.innerHTML+= ' <a href="#" style="text-decoration:none" title="&#1053;&#1072;&#1089;&#1090;&#1088;&#1086;&#1080;&#1090;&#1100;" onclick="'+editregions+'"><sup>(+)</sup></a> ';
refblock.innerHTML+= ' <a href="http://search.yaca.yandex.ru/geo.c2n" style="text-decoration:none" title="&#1057;&#1087;&#1080;&#1089;&#1086;&#1082; ID &#1088;&#1077;&#1075;&#1080;&#1086;&#1085;&#1086;&#1074;" target="_blank"><sup>(:)</sup></a>';
refblock.innerHTML+= ' <a href="http://ivanov.in/upbar/sfront-help.php?v='+version+'" style="text-decoration:none; background-image: url(http://ivanov.in/upbar/sfront-help.php?type=image&v='+version+')" title="&#1055;&#1086;&#1084;&#1086;&#1097;&#1100;" target="_blank"><sup>(?)</sup></a>';

}

showHost();
