onload = function(){

	//if(typeof tooltip.init == 'function') {
	//	tooltip.init();
	//} 

	document.body.onclick = clean;
	var O = document.getElementById('city_sug');
	var R = document.getElementById('region_sug');
	var D = document.getElementById('cities_suggestions');
	//var P = document.getElementById('fCode');
	
	O.setAttribute("autocomplete", "off"); 
	O.T = 0;
	
	var ul = document.createElement('ul');
	ul.style.display = 'none';
	D.appendChild(ul);
	
	var started = 0;
	
	function data(A){
		clean();
		started = (A.length > 0);
		
		for(var i = 0, v; v = A[i++];){
			var li = document.createElement('li');
			
			li.city = v[0];
			li.info = v[1];
			li.reg = v[2];
			
			li.appendChild(document.createTextNode(li.info));
			
			li.onclick = choose;
			li.onmouseover = changeSelected;
			
			ul.appendChild(li);
		}

		if(ul.firstChild) {
			ul.firstChild.setAttribute('id', 'hint_selected');
			ul.style.display = 'block';
		}
	}
	
	document.onkeydown = function(e, s, n){	
		if(!started){
			return;
		}
		e = e||event;

		if(s = document.getElementById('hint_selected')){
			switch(e.keyCode){
				case 40: // down
					s.removeAttribute('id');
					if(n = s.nextSibling){
						n.setAttribute('id', 'hint_selected');
					}else{
						ul.firstChild.setAttribute('id', 'hint_selected');
					}
					break;
				case 38: // up
					s.removeAttribute('id');
					if(n = s.previousSibling){
						n.setAttribute('id', 'hint_selected');
					}else{
						ul.lastChild.setAttribute('id', 'hint_selected');
					}
					break;
				case 13: // enter
					s.onclick();
					break;
				case 9: // tab
					clean();
					break;
			}
		}
	}
	
	function choose(){
		R.value = this.reg;
		O.value = this.city;
		clean();
	}
	
	function changeSelected(){
		s = document.getElementById('hint_selected');
		if(s) s.removeAttribute('id');
		this.setAttribute('id', 'hint_selected');
	}
	
	function clean(){
		while(child = ul.firstChild){
			ul.removeChild(child);
		}
		ul.style.display = 'none';
	}
	
	O.onkeydown = function(e){
		e = e||event;
		
		//if(e.keyCode==9){
			//P.focus();
		//}
		
		if(e.keyCode == 40 || e.keyCode == 38 || e.keyCode == 13 ||  e.keyCode == 9){
			return!1;
		}
		clearTimeout(this.T);
		
		var M = this;
		
		this.T = setTimeout(function(){
			advAJAX.get({
				url: "/cities-suggestions",
				parameters : {
					"letters" : M.value
				},
				onSuccess : function(obj){
					for(var i = 0, A = [], o; o = obj.responseXML.getElementsByTagName('rs')[i++];){
						A.push([
							o.firstChild.nodeValue,	// miasto
							o.getAttribute('info'),	// informacje
							o.getAttribute('reg')	// województwo
						]);
					}
					data(A);
				}
			});
		}, 500);
	}
}
