
var trans = [];
for (var i = 0x410; i <= 0x44F; i++) trans[i] = i - 0x350;
trans[0x401] = 0xA8;
trans[0x451] = 0xB8;
var escapeOrig = window.escape;
window.escape = function(str) {
	var ret = [];
	for (var i = 0; i < str.length; i++) {
		var n = str.charCodeAt(i);
		if (typeof trans[n] != 'undefined') n = trans[n];
		if (n <= 0xFF) ret.push(n);
	}
	return escapeOrig(String.fromCharCode.apply(null, ret));
}

function getXmlHttp(){
	var xmlhttp = false;
	try {
		xmlhttp = new XMLHttpRequest();
	} catch (trymicrosoft) {
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (othermicrosoft) {
			try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (failed) {
				xmlhttp = false;
			}
		}
	}
	if (!xmlhttp) alert("Error initializing XMLHttpRequest");
	return xmlhttp;
}

var selectedIndex = 0;
function AutoSearch(field, key, url, act){
	var xmlHttp = getXmlHttp();
	var string = ('random=' + Math.random());
	xmlHttp.open("POST", url, true);
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlHttp.onreadystatechange = updateSRC;
	xmlHttp.send(string);	
	function updateSRC() {
		if (xmlHttp.readyState == 4) {
			var response = xmlHttp.responseText;
			if (xmlHttp.status == 200) {
				CompleteSearch(field, key, response, act)
			}
		}
	}
}
function CompleteSearch(field, key, string, act) {
	var suggestionText = string;
	if (act == 2 ){
		var div = document.getElementById('SearchResultFirm');
		var list = document.getElementById('SearchResTableFirm');
	}
	else {
		var div = document.getElementById('SearchResultTov');
		var list = document.getElementById('SearchResTableTov');		
	}
	var classInactive = "sf_inactive";
	var classActive = "sf_active";
	var classText = "sf_text";
		function startList() {
			var arr = getListItems(field.value);

			if(field.value.length > 0) {
				createList(arr);
			} else {
				clearList();
			};
		};
		function getListItems(value) {
			var arr = new Array();
			var src = suggestionText;

			var arrSrc = src.split('\\#');
			for(i=0;i<arrSrc.length;i++) arr.push(arrSrc[i]);
			return arr;
		};
		function createList(arr) {
			resetList();
			if(arr.length > 0) {
				for(i=0;i<arr.length;i++) {
					li = document.createElement("li");
					a = document.createElement("a");
//					a.href = "javascript:void(0);";
					a.i = i+1;
					a.innerHTML = arr[i];
					li.i = i+1;
					li.onmouseover = function() {
						navListItem(this.i);
					};
					a.onmousedown = function() {
						selectedIndex = this.i;
						selectList(this.i);
						return false;
					};
					li.appendChild(a);
					list.setAttribute("tabindex", "-1");
					list.appendChild(li);
				};
				div.style.display = "block";
			} else {
				clearList();
			};
		};
		function resetList() {
			var li = list.getElementsByTagName("li");
			var len = li.length;
			for(var i=0;i<len;i++) {
				list.removeChild(li[0]);
			};
		};
		function navList(dir) {
			selectedIndex += (dir == "down") ? 1 : -1;
			li = list.getElementsByTagName("li");
			if (selectedIndex < 1) selectedIndex =  li.length;
			if (selectedIndex > li.length) selectedIndex =  1;
			navListItem(selectedIndex);
		};
		function navListItem(index) {
			selectedIndex = index;
			li = list.getElementsByTagName("li");
			for(var i=0;i<li.length;i++) {
				li[i].className = (i==(selectedIndex-1)) ? "selected" : "";
			};
		};
		function selectList() {
			li = list.getElementsByTagName("li");
			a = li[selectedIndex-1].getElementsByTagName("a")[0];
			field.value = a.innerHTML;
			clearList();
			SearchOutput(field, act);
		};		
		
		
	this.safari = ((parseInt(navigator.productSub)>=20020000)&&(navigator.vendor.indexOf("Apple Computer")!=-1));
	if(field && !safari) {
		field.c = field.className;
		field.className = field.c + " " + classInactive;
		field.onfocus = function() {
			this.className = this.c + " "  + classActive;
		};
		field.onblur = function() {
			this.className = (this.value != "") ? this.c + " " +  classText : this.c + " " +  classInactive;
			clearList();
		};
		div.style.left = getOffset(field).left + 0 + 'px';
		div.style.top = getOffset(field).top + 21 + 'px';
		list.style.width = field.offsetWidth + "px";
		switch(key) {
		case 13:
			if (selectedIndex > 0) {
				selectList();
				selectedIndex = 0;
			} else {
				if (field.value != '') {
					clearList();
					SearchOutput(field, act);
				}
			}
			return false;
			break;
		case 27:
			field.value = "";
			selectedIndex = 0;
			clearList();
			break;
		case 38:
			navList("up");
			break;
		case 40:
			navList("down");
			break;
		default:

			startList();
			break;
		};


	};
	function clearList() {
		if(list) {
			div.style.display = "none";
			selectedIndex = 0;
		};
	};
};

function getOffset(elem) {
	if (elem.getBoundingClientRect) {
		return getOffsetRect(elem)
	} else {
		return getOffsetSum(elem)
	}
}
function getOffsetSum(elem) {
	var top=0, left=0
	while(elem) {
		top = top + parseInt(elem.offsetTop)
		left = left + parseInt(elem.offsetLeft)
		elem = elem.offsetParent
	}
	return {top: top, left: left}
}
function getOffsetRect(elem) {
	var box = elem.getBoundingClientRect()
	var body = document.body
	var docElem = document.documentElement
	var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
	var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft
	var clientTop = docElem.clientTop || body.clientTop || 0
	var clientLeft = docElem.clientLeft || body.clientLeft || 0
	var top  = box.top +  scrollTop - clientTop
	var left = box.left + scrollLeft - clientLeft
	return { top: Math.round(top), left: Math.round(left) }
}


