var arrX = 0;
var arrStop = 0;
var bussy = false;
var x;

function KeyUp(limit, e, src, dst) {
	x = Process(limit, e.keyCode, src, dst);	
}

function KeyDown(e, dst) {
	var dest = document.getElementById(dst);
	switch(e.keyCode) {
		case 40: //вниз
	                if (dest.selectedIndex < dest.options.length-1)
        			dest.selectedIndex ++;
			else
				dest.selectedIndex = 0;
	                return false;
			break;
            	case 38: //вверх
			if (dest.selectedIndex > 0)
				dest.selectedIndex --;
			else
				dest.selectedIndex = dest.options.length - 1;
			return false;
			break;
	}
}
function Process(limit, keyCode, src, dst) {
	var source = document.getElementById(src);
	var dest = document.getElementById(dst);
	var st = source.value;
	st = st.replace(/[qwertyuiopasdfghjklzxcvbnm\w]/ig, '');
	if (st != source.value){
		dest.style.display='none';
		arrX = 0;
		arrStop = 0;
		return false;
	}
	if (source.value.length < limit) {
		dest.style.display='none';
		arrX = 0;
		arrStop = 0;
		return false;
	}
	uri = 'city.php';
	switch(keyCode) {
                case 9: dest.style.display='none';
			break;
                case 27: source.focus();
                    	dest.style.display='none';
			return false;
			break;
		case 16: return false;
			break;
		case 17: return false;
			break;
		case 35: return false;
			break;
		case 36: return false;
			break;
		case 37: return false;
			break;
		case 39: return false;
			break;
		case 40: //вниз
	                return false;
			break;
            	case 38: //вверх
			return false;
			break;
		case 8: arrStop = 0; //bksp
			break;
		case 46: arrStop = 0; //del
			break;
		case 13:  arrStop = 1;
			SelectToText(dest, source);
			return false;
			break;
	}
	if (arrStop == 1) {
		return false;
	}
	var r, postData;
	arrX = 0;
	this.getRequestObject = function() {
		var req = null;
		if (typeof XMLHttpRequest != "undefined")
			req = new XMLHttpRequest();
		if (!req && typeof ActiveXObject != "undefined") {
			try {
				req=new ActiveXObject("Msxml2.XMLHTTP");
				XMLHttpRequest = function(){return new ActiveXObject("Msxml2.XMLHTTP");}
			}
			catch (e1) {
				try {
					req=new ActiveXObject("Microsoft.XMLHTTP");
					XMLHttpRequest = function(){return new ActiveXObject("Microsoft.XMLHTTP");}
				}
				catch (e2) {
					try {
						req=new ActiveXObject("Msxml2.XMLHTTP.4.0");
						XMLHttpRequest = function(){return new ActiveXObject("Msxml2.XMLHTTP.4.0");}
					}
					catch (e3) {
						req=null;
					}
				}
			}
		}
		if(!req && window.createRequest)
			req = window.createRequest();

		return req;
	}
	r = this.getRequestObject();
	if (!r) return false;
	bussy = true;
//	document.cookie = "c=;";
	r.open("POST", uri, true);
	try {
		r.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
		r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		r.setRequestHeader("Accept-Language", "ru, en");
		r.setRequestHeader("Accept-Charset", "windows-1251");
	}
	catch(e) {
		alert("Your browser does not appear to  support asynchronous requests using POST.");
		return false;
	}
	r.onreadystatechange = function() {
		bussy = false;
		if (r.readyState != 4)
			return;
		if (r.status==200) {
			if (r.responseText == '') {
				dest.style.display='none';
				arrStop = 1;

			} else {
				response = r.responseText.split("::");
				count = response.length;
				if (count == 1) {
					resp = response[0].split("##");
					source.value = resp[1];
					arrX = resp[0];
					dest.options.length = 0;
					dest.style.display = 'none';
					arrStop = 1;
				} else {
//					count --;
					dest.options.length = 0;
					dest.options.length = count;
					for (i=0; i<count; i++) {
						resp = response[i].split("##");
						dest.options[i].text = resp[1];
						dest.options[i].value = resp[0];
					}
					dest.size = count;
					var offset = objectXY(source); //GetElementPosition
					dest.style.top =offset.y +'px';
					dest.style.left =offset.x +'px';
					dest.style.width =offset.width + 'px';
					dest.style.display='block';
				}
			}

		}
	}
	postData = "r=" + source.value;
	r.send(postData);
	delete r;
	return true;
}
function SelectItem(e, src, dst) {
	dest = document.getElementById(dst);
	if (e.keyCode == 13) {
		SelectToText(src.id, dst);
	} else if(e.keyCode==27) {
		dest.focus();
		src.style.display='none';
        }
}


function SelectToText(source, dest) {
	dest.value = source.options[source.selectedIndex].text;
	arrX = source.options[source.selectedIndex].value;
	dest.focus();
	source.style.display='none';
//	document.cookie='c=' + escape(dest.value) + ';path=/;cid=' + arrX + ';path=/;';
	document.cookie='cid=' + arrX ;

}

function objectXY(obj) {
	var result = new Object();
	var x = 0, y = obj.offsetHeight;
	result.width = obj.offsetWidth;
	result.height = obj.offsetHeight;
	do {
		x += obj.offsetLeft;
		y += obj.offsetTop
	} while (typeof(obj = obj.offsetParent) != 'undefined' && obj != null);
	result.x = x;
	result.y = y;
	return result;
}
function HideControls() {
	document.getElementById('iSelect1').style.display='none';
}

