$(document).ready(function() {
	//$("#country").change(placesSelectChanged);
	$('#country_fake > span').mousedown(countriesSelectChanged);
	$('#realtyType_fake > span').mousedown(realtyTypeSelectChanged);
	// Смотрим заданы ли уже значения городов и регионов
	if ($("#country").val() != 0)
		countriesSelectChanged(null, $("#country").val());

	var regionSaved = $("#region_saved");
	if (regionSaved.length != 0 && regionSaved.val() != 0)
		regionsSelectChanged(null, $("#region_saved").val());
});

function realtyTypeSelectChanged(event)
{
	var selected = $(this).attr("name");
	
	SelectZero("country");
	SelectZero("region");
	SelectZero("city");
	$("#regionContainer:visible, #cityContainer:visible").slideToggle();
	$.cachePost("/ajax/getcountries/", 
			{selectedID : selected}, 
			getCountriesCallbackHandler,
			"json");
}

function countriesSelectChanged(event, value)
{
	//$("#regionContainer:visible, #cityContainer:visible").slideToggle();
	SelectZero("region");
	SelectZero("city");
	var selected = $(this).attr("name");
	if (typeof value != "undefined")
		selected = value;

	if (selected == 0)
	{
		
	}
	else
	{
		$.cachePost("/ajax/getplaces/", 
				{selectedID : selected}, 
				getRegionsCallbackHandler,
				"json");
	}
}

function regionsSelectChanged(event, value)
{
	SelectZero("city");
	var selected = $(this).attr("name");
	if (selected == 0)
	{
		
	}
	else
	{
		$.cachePost("/ajax/getplaces/", 
				{selectedID : selected}, 
				getCitiesCallbackHandler,
				"json");
	}
}

/**
*  Handler для ajax-запроса на список стран
*/
function getCountriesCallbackHandler(data, status)
{
	if (!standartAJAXResponseHandler(data, status)) return;
	AddOptions(data, "country", countriesSelectChanged);
}

/**
*  Handler для ajax-запроса на список регионов. 
*  Параллельно может заполнить города
*/
function getRegionsCallbackHandler(data, status)
{
	if (!standartAJAXResponseHandler(data, status)) return;
	
	// посмотрим нет ли сохранённого региона/города
	var regionSavedInput = $("#region_saved");
	var citySavedInput = $("#city_saved");
	var regionSaved = 0;
	var citySaved = 0;
	if (regionSavedInput.length != 0 && regionSavedInput.val() != 0)
	{
		regionSaved = regionSavedInput.val();
		regionSavedInput.remove();
	}
	if (citySavedInput.length != 0 && citySavedInput.val() != 0)
	{
		citySaved = citySavedInput.val();
		//citySavedInput.remove(); лечше тут не надо убирать. можно убирать уже в AddOptions
	}
	//
	
	var regions = new Array();
	var cities = new Array();
	for (var i = 0; i < data.length; i++)
	{
		if (data[i]["pageTypeID"] == 3) // REGION
		{
			if (regionSaved == data[i]["pageID"])
				data[i]["selected"] = true;
			regions.push(data[i]);
		}
		else if (data[i]["pageTypeID"] == 4) // CITY
		{
			if (citySaved == data[i]["pageID"])
				data[i]["selected"] = true;
			cities.push(data[i]);
		}
	}
	if (cities.length > 0)
	{
		AddOptions(cities, "city", null);
		$("#cityContainer:hidden").slideToggle();
	}
	else
	{
		$("#cityContainer:visible").slideToggle();
	}
	
	if (regions.length > 0)
	{
		AddOptions(regions, "region", regionsSelectChanged);
		$("#regionContainer:hidden").slideToggle();
	}
	else
	{
		$("#regionContainer:visible").slideToggle();
	}
}

/**
*  Handler для ajax-запроса на список городов. 
*/
function getCitiesCallbackHandler(data, status)
{
	if (!standartAJAXResponseHandler(data, status)) return;
	
	// посмотрим нет ли сохранённого города
	var citySavedInput = $("#city_saved");
	var citySaved = 0;
	if (citySavedInput.length != 0 && citySavedInput.val() != 0)
	{
		citySaved = citySavedInput.val();
		citySavedInput.remove();
	}
	//
	
	var cities = new Array();
	for (var i = 0; i < data.length; i++)
	{
		if (data[i]["pageTypeID"] == 4) // CITY
		{
			if (citySaved == data[i]["pageID"])
				data[i]["selected"] = true;
			cities.push(data[i]);
		}
	}
	if (cities.length == 0)
	{
		$("#cityContainer:visible").slideToggle();
	}
	else
	{
		AddOptions(cities, "city", null);
		$("#cityContainer:hidden").slideToggle();
	}
}

/**
*  Функция добавления опшенов
*/
function AddOptions(data, id, clickHandler)
{
	container = $("#"+id+"_fake");
	container.children("span[name!=0]").remove();
	var selected = null;
	if (data.length > 0)
	{
		for (var i = 0; i < data.length; i++)
		{
			var span = $("<span>")
					.attr("name", data[i]["pageID"])
					.text(LANG == "ru" ? data[i]["caption"] : data[i]["caption_en"]);
			container.append(span);
			if (clickHandler != null)
					span.mousedown(clickHandler);
			if (typeof data[i]["selected"] != "undefined" && data[i]["selected"])
				selected = {text:data[i]["caption"], value:data[i]["pageID"]};
		}
	}
	optionClickHover();
	if (selected != null)
	{
		$("#"+id).val(selected.value);
		$("#v"+id).val(selected.text);
	}
}

/**
*  Фикс для компонента — выбор нулевого опшена
*/
function SelectZero(id)
{
	var option = $("#"+id+"_fake").children("span[name=0]");
	if (option.length == 1)
	{
		$("#v"+id).val(option.text());
		$("#"+id).val(option.attr("name"));
	}
}
