
function IsFilterContains(filter, value)
{
	if (filter.length == 0) {return true;}
	for (i=0; i<filter.length; i++){ if (filter[i] == value) {return true};}
	return false;
}

function RenderItemsComboBox( control, array, filter )
{
	control.clearItems();
	if (array == null){return;}
	for (var i=0;i<array.length; i++)
	{
		if (filter && IsFilterContains(filter, array[i].id))
		{
		    var value;
		    if (array[i].russianName != null)
		        value = array[i].russianName;
		    if (array[i].key != null)   
		        value = array[i].key;
			control.add(new ComboBoxItem(value, array[i].id));
		}
	}
}

function RenderItemsListBox( control, array, filter )
{
	control.clearItems();
	control.setValues([], false);
	if (array == null){return;}
	for (var i=0;i<array.length; i++)
	{
		if (filter && IsFilterContains(filter, array[i].id)) {
			control.add(new ListBoxItem(array[i].russianName, array[i].id));
		}
	}
	control.dataBind();
}

function ClearList(control)
{
}

function LoadCurrencies_callback()
{
	RenderItemsComboBox(CurrencyComboBox, currenciesDS, []);
	CurrencyComboBox.setValue(selectedCurrencyId, false);
}

function LoadMeals_callback()
{
	RenderItemsListBox(MealsListBox, mealsDS, []);
	MealsListBox.setValues(selectedMealsIds, false);
}

function LoadStars_callback()
{
	RenderItemsListBox(StarsListBox, starsDS, []);
	StarsListBox.setValues(selectedStarIds, false);
}

function loadTourTypes_callback()
{
	RenderItemsComboBox(TourTypeComboBox, tourTypesDS, []);
	TourTypeComboBox.setValue(selectedTourTypeId, false);
}

function LoadOperators_callback()
{
}

function LoadHotelsEx_callback()
{
}

function LoadDestinationCities_callback()
{
	RenderItemsListBox(DestinationCitiesListBox, citiesDS, []);
	if ( selectedDestinationCitiesIds.length == 0 || DestinationCitiesListBox.isValues(selectedDestinationCitiesIds) == false ) {
		selectedDestinationCitiesIds = [];
		ClearHotels();
		return;
	}
	DestinationCitiesListBox.setValues(selectedDestinationCitiesIds, false);
}

function LoadDestinationCitiesWoHotels_callback()
{
	RenderItemsListBox(DestinationCitiesListBox, citiesDS, []);
	selectedDestinationCitiesIds = [];
}

function LoadDestinationCountries_callback()
{
	RenderItemsComboBox(DestinationCountryComboBox, destinationCountriesDS, DefaultDestinationCountries);
	var cur = DestinationCountryComboBox.getItem(selectedDestinationCountryId);
	if ( cur && cur.value != selectedDestinationCountryId ) {
		selectedDestinationCountryId = cur.value;
		DestinationCountryComboBox.setValue(selectedDestinationCountryId, true);
		return;
	} 
	DestinationCountryComboBox.setValue(selectedDestinationCountryId, false);
}

function LoadHotels_callback()
{
	RenderItemsListBox(HotelsListBox, hotelsDS, []);
	ClearRedundantHotels();
	HotelsListBox.setValues(selectedHotelIds, false);
}

function LoadDepartureCities_callback()
{
	RenderItemsComboBox(DepartureCityComboBox, departureCitiesDS, DefaultDepartureCities);
	var cur = DepartureCityComboBox.getItem(selectedDepartureCityId);
	if ( cur && cur.value != selectedDepartureCityId ) {
		selectedDepartureCityId = cur.value;
		DepartureCityComboBox.setValue(selectedDepartureCityId, true);
		return;
	} 

	DepartureCityComboBox.setValue(selectedDepartureCityId, false);
}




function OnSelectDepartureCity(value)
{
	selectedDepartureCityId = value;
	switch(interrelationshipsOfDepartureCitiesAndDestinationCountries)
	{
		case "DestinationCountriesDependsOnDepartureCities":
			LoadDestinationCountriesByDepartureCity(selectedDepartureCityId, selectedTourTypeId, LoadDestinationCountries_callback);
			break;
		default:
	}
}

function OnSelectDestinationCountryWithoutHotels(value)
{
	selectedDestinationCountryId = value;
	switch(interrelationshipsOfDepartureCitiesAndDestinationCountries)
	{
		case "DepartureCitiesDependsOnDestinationCountries":
			LoadDepartureCitiesByDestinationCountry(selectedDestinationCountryId, selectedTourTypeId, LoadDepartureCities_callback);
			LoadDestinationCities(selectedDestinationCountryId, LoadDestinationCitiesWoHotels_callback);
			break;    
		default:
			LoadDestinationCities(selectedDestinationCountryId, LoadDestinationCitiesWoHotels_callback);
	}
}

function OnSelectDestinationCountry(value)
{
	selectedDestinationCountryId = value;
	switch(interrelationshipsOfDepartureCitiesAndDestinationCountries)
	{
		case "DepartureCitiesDependsOnDestinationCountries":
			LoadDepartureCitiesByDestinationCountry(selectedDestinationCountryId, selectedTourTypeId, LoadDepartureCities_callback);
			LoadDestinationCities(selectedDestinationCountryId, LoadDestinationCities_callback);
			break;    
		default:
			LoadDestinationCities(selectedDestinationCountryId, LoadDestinationCities_callback);
	}
}

function OnSelectTourType(value)
{
    selectedTourTypeId = value;
    LoadDepartureCities(selectedTourTypeId, LoadDepartureCities_callback);
	LoadDestinationCountriesByDepartureCity(selectedDepartureCityId, selectedTourTypeId, LoadDestinationCountries_callback);
}

function OnSelectDestinationCity(selectedArray)
{
	selectedDestinationCitiesIds = selectedArray;
	if (selectedDestinationCitiesIds.length > 0) {
		LoadHotels(selectedDestinationCountryId, selectedDestinationCitiesIds, selectedStarIds, LoadHotels_callback);
	} else {
		ClearHotels();
	}
}

function OnSelectDestinationCityWithoutHotels(selectedArray)
{
	selectedDestinationCitiesIds = selectedArray;
}


function OnSelectStar(selectedArray)
{
	selectedStarIds = selectedArray;
	LoadHotels(selectedDestinationCountryId, selectedDestinationCitiesIds, selectedStarIds, LoadHotels_callback);
}

function OnSelectStarWoHotels(selectedArray) {
    selectedStarIds = selectedArray;
}



/* Вспомогательные методы */

// Проверяем, что каждому выбранному отелю соответствует отель в листе отелей.
function ClearRedundantHotels()
{
	var selectedHotels = HotelsListBox.selectedItems;
	var hotels = GetHotelList();
	var trustedIds = new Array();
	for(var i = 0; i < selectedHotels.length; i++)
	{
		if(contains(hotels, selectedHotels[i]))
			trustedIds.push(selectedHotels[i]);
	}
	HotelsListBox.selectedItems = trustedIds;
	HotelsListBox.valcon.value = trustedIds.join(',');
}

// Возвращает список отелей для текущего города.
function GetHotelList()
{
	var hotels = new Array();
	var hotelsList = HotelsListBox.options;
	for(var i = 0; i < hotelsList.length; i++)
	{
		hotels.push(hotelsList[i].value);
	}
	return hotels;
}

function ClearHotels()
{
	hotelsDS = [];
	selectedHotelIds = [];
	if ( typeof(HotelsListBox) != "undefined" ) {
		RenderItemsListBox(HotelsListBox, [], []);
	}
}

function ClearDestinationCities()
{
	citiesDS = [];
	selectedDestinationCitiesIds = [];
	if ( typeof(DestinationCitiesListBox) != "undefined" ) {
		RenderItemsListBox(DestinationCitiesListBox, [], []);
	}
}

function ClearDestinationCountries()
{
	destinationCountriesDS = [];
	selectedDestinationCountryId = 0;
	if ( typeof(DestinationCountryComboBox) != "undefined" ) {
		RenderItemsComboBox(DestinationCountryComboBox, [], []);
	}
}

function ClearDepartureCities()
{
	departureCitiesDS = [];
	selectedDepartureCityId = 0;
	if ( typeof(DepartureCityComboBox) != "undefined" ) {
		RenderItemsComboBox(DepartureCityComboBox, [], []);
	}
}
