var cur_element;
var sCityLastValue;
var cur_element_pos = null;
var bCitySelected = false;

function DocumentOnClick(e)
{
	var e = e ? e : (window.event ? window.event : false);
	var srcElement = e.srcElement ? e.srcElement : (e.target ? e.target : false);

	if (srcElement.id != 'CITY_TEXTBOX')
	{
		CityBlockHide();
	}
}

function OnChangeCity(sCityName, sHost, sLanguage, sCountryDdlId, sRegionDdlId)
{
	if (sCityName && sCityName.length > 0)
	{
		if (sCityName != sCityLastValue)
		{
			if (bCitySelected)
			{
				bCitySelected = false;
			}
			else
			{
				sCityLastValue = sCityName;
				var url = 'http://' + sHost + '/ajax/cities_list.php?city_name=' + sCityName + '&lang=' + sLanguage;
				
				var oCountrySelect = document.getElementById(sCountryDdlId);
				if (oCountrySelect && oCountrySelect.value != '0')
				{
					url += '&country_id=' + oCountrySelect.value
				}
				
				var oRegionSelect = document.getElementById(sRegionDdlId);
				if (oRegionSelect && oRegionSelect.value != '0')
				{
					url += '&region_id=' + oRegionSelect.value
				}

				CHttpRequest.Action = OnCityResponse;
				CHttpRequest.Send(url);
			}
		}
	} 
	else 
	{
		CityBlockHide();
	}
}

function OnCityResponse(result)
{
	if (result.length > 0)
	{
		var citiesListBlock = document.getElementById('CITY_LIST_BLOCK');
		citiesListBlock.innerHTML = result;
		CityBlockShow();
	}
	else
	{
		CityBlockHide();
	}
}

function CityBlockShow()
{
	var citiesListBlock = document.getElementById('CITY_LIST_BLOCK');
	if (citiesListBlock)
	{
		citiesListBlock.style.display = '';
	}
}

function CityBlockHide()
{
	var citiesListBlock = document.getElementById('CITY_LIST_BLOCK');
	if (citiesListBlock)
	{
		citiesListBlock.style.display = 'none';
	}
}
		
function OnCityKeyDown(textBox, evt)
{
	if(evt.keyCode)
	{
		switch(evt.keyCode) 
		{
			case 13: // ENTER
			{
				if (cur_element)
				{
					sCityLastValue = textBox.value;
					textBox.value = cur_element.title;
					bCitySelected = true;

					CityBlockHide();
					return false;
				}

				break;
			}
			case 27: // ESC
			{
				CityBlockHide();
				break;
			}
			case 38: // UP
			{
				SelPrevElement();
				break;
			}
			case 40: // DOWN
			{
				SelNextElement();
				break;
			}
			default:
			{
				return true;
				break;
			}
		}
	}
}

function clear_nodes(nodes)
{
	if (nodes != null && nodes.length > 0)
	{
		var arr_nodes = [];
		for (var i=0; i < nodes.length; i++)
		{
			if (nodes[i].nodeType == 1) arr_nodes.push(nodes[i]);
		}
		
		return arr_nodes;
	}
}

function OnMouseMoveCity(oElement)
{
	var city_list = document.getElementById("CITY_LIST_BLOCK");
	
	if (city_list)
	{
		var nodes = clear_nodes(city_list.childNodes);
		nodes = clear_nodes(nodes[0].childNodes);
		
		if (cur_element_pos != null)
		{
			nodes[cur_element_pos].className = 'line';
			cur_element_pos = null;
		}
	}
	
	if (oElement)
	{
		oElement.className = 'selected_line';
		cur_element = oElement;
	}
}

function OnMouseOutCity(oElement)
{
	if (oElement)
	{
		oElement.className = 'line';
		cur_element = null;
	}
}

function OnClickCity(sCityName)
{
	var city_input = document.getElementById("CITY_TEXTBOX");
	
	if (sCityName && sCityName.length > 0 && city_input)
	{
		last_value = city_input.value;
		city_input.value = sCityName;
	}
		
	CityBlockHide();
}

function SelNextElement()
{
	var city_list = document.getElementById("CITY_LIST_BLOCK");
	
	if (cur_element) 
	{
		cur_element.className = 'line';
	}
	
	if (city_list)
	{
		var nodes = clear_nodes(city_list.childNodes);
		nodes = clear_nodes(nodes[0].childNodes);
		
		if (cur_element_pos != null)
		{
			nodes[cur_element_pos].className = 'line';
			
			if (cur_element_pos + 1 < nodes.length)
			{
				nodes[cur_element_pos + 1].className = 'selected_line';
				cur_element_pos++;
			}
			else
			{
				nodes[0].className = 'selected_line';
				cur_element_pos = 0;
			}
		}
		else
		{
			nodes[0].className = 'selected_line';
			cur_element_pos = 0;
		}
		
		cur_element = nodes[cur_element_pos];
	}
}

function SelPrevElement()
{
	var city_list = document.getElementById("CITY_LIST_BLOCK");
	
	if (cur_element) 
	{
		cur_element.className = 'line';
	}
	
	if (city_list)
	{
		var nodes = clear_nodes(city_list.childNodes);
		nodes = clear_nodes(nodes[0].childNodes);
		
		if (cur_element_pos != null)
		{
			nodes[cur_element_pos].className = 'line';
		
			if (cur_element_pos > 0)
			{
				nodes[cur_element_pos - 1].className = 'selected_line';
				cur_element_pos--;
			}
			else
			{
				cur_element_pos = nodes.length - 1;
				nodes[cur_element_pos].className = 'selected_line';
			}
		}
		else
		{
			cur_element_pos = nodes.length - 1;
			nodes[cur_element_pos].className = 'selected_line';
		}
		
		cur_element = nodes[cur_element_pos];
	}
}

document.onclick = DocumentOnClick;