var hexchars = "0123456789ABCDEF";
function toHex(n) { return hexchars.charAt(n>>4)+hexchars.charAt(n & 0xF); }
var okURIchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
                  // 0x0400 (1024)
//var CyrCharsUnicode = " ¨              ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ ¸              ";

function enc(s) {
  var c;
  var enc = "";
  for (var i= 0; i<s.length; i++) {
    if (okURIchars.indexOf(s.charAt(i))==-1) {
	  c = s.charCodeAt(i);
	  if (c == 0x0401) { // ¨
	    c = 0xa8;
	  }
	  else
	    if (c == 0x0451) // ¸
		  c = 0xb8;
		else
		  if (c >= 0x0400 && c <= 0x045f) // cyr
		    c = c - 0x0350; // - 0x0410 + 0xc0;
	  if (c == 0x20)
	    enc += "+";
	  else
        if (c <= 0xff && c != 0x5c)
          enc += "%"+toHex(c);
	}
	else
	  enc += s.charAt(i);
  }
  return enc;
}

function cl(a) {
	if (sf.stext.value.length) {
		if (a == asl)
			asl.href = '/adv.php?su=' + enc(sf.stext.value) + '&st=' + sf.stype.value;
		if (a == qsl)
			qsl.href = '/?su=' + enc(sf.stext.value) + '&st=' + sf.stype.value;
	} return true;
}


var xmlhttp;

var sr_suggest_last_request_str = '';
var sr_suggest_count;
var sr_suggest_selected;

function sr_suggest_hide() {
  document.getElementById("sf_menu_popup").style.display = "none";
}

function sr_suggest_control(ev) {
  if (sr_suggest_count) {
	  var key = (window.event) ? window.event.keyCode : ev.keyCode;
    var RETURN = 13;
    var TAB = 9;
    var ESC = 27;
  	switch(key)
  	{
  		case ESC:
  		  sr_suggest_hide();
  			return;
  		case RETURN:
        if (e = document.getElementById("sfm_"+sr_suggest_selected)) {
          sr_suggest_select(e);
        }
  			return false;
  	}
  }
}

function sr_suggest_request(str, ev) {
  if (str.length < 2) {
    sr_suggest_hide();
    return;
  }
  if (sr_suggest_count) {
	  var key = (window.event) ? window.event.keyCode : ev.keyCode;
  	var ARRUP = 38;
  	var ARRDN = 40;
  	switch(key)
  	{
  		case ARRUP:
  			sr_suggest_selected--;
  			if (sr_suggest_selected < 1) {
  			  sr_suggest_selected = 1;
  			}
 			  sr_suggest_highlight();
  			return;
  		case ARRDN:
  			sr_suggest_selected++;
  			if (sr_suggest_selected > sr_suggest_count) {
  			  sr_suggest_selected = 10;
  			}
 			  sr_suggest_highlight();
  			return;
  	}
  }
  if (sr_suggest_last_request_str == str) {
    return;
  }
  sr_suggest_last_request_str = str;
  xmlhttp = GetXmlHttpObject();
  if (xmlhttp == null) {
    sr_suggest_hide();
    return;
  }
  var url = "/rpc/ac.php?rnd=" + Math.random();
  xmlhttp.onreadystatechange = sr_suggest_request_complete;
  xmlhttp.open("POST",url,true);
  xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xmlhttp.send('s=' + enc(str));
}

function sr_suggest_request_complete() {
  if (xmlhttp.readyState == 4) {
    if (xmlhttp.responseText.search('<table') == -1) {
      sr_suggest_hide();
    }
    else {
      sr_suggest_selected = 0;
      document.getElementById("sf_menu_popup").innerHTML = xmlhttp.responseText;
      document.getElementById("sf_menu_popup").style.display = "block";
      sr_suggest_set_count();
    }
  }
}

function sr_suggest_select(tag) {
  var str = tag.innerHTML.replace(/<[^>]+>/g, "");
  document.getElementById("stext").value = str;
  sr_suggest_hide();
  document.getElementById("sf").submit();
}

function sr_suggest_hover(position) {
  sr_suggest_selected = position;
  sr_suggest_highlight();
}

function sr_suggest_set_count() {
  sr_suggest_count = 0;
  for (i = 1; i <= 10; i++) {
    if (e = document.getElementById("sfm_"+i)) {
      sr_suggest_count = i;
    }
  }
}

function sr_suggest_highlight() {
  for (i = 1; i <= 10; i++) {
    if (e = document.getElementById("sfm_"+i)) {
      e.className = '';
    }
  }
  if (e = document.getElementById("sfm_"+sr_suggest_selected)) {
    e.className = 'selected';
  }
}

function GetXmlHttpObject()
{
  if (window.XMLHttpRequest)
    {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    return new XMLHttpRequest();
    }
  if (window.ActiveXObject)
    {
    // code for IE6, IE5
    return new ActiveXObject("Microsoft.XMLHTTP");
    }
  return null;
}