/* Location */
countriesSelectObj = null;
regionsSelectObj = null;
citiesSelectObj = null;

function initLocation()
{
	/* countries div */
	if (!isset(countriesContainerName)) {
		var countriesContainerName = 'countriesCnt';
	}
	var countriesContainer = $(countriesContainerName);
	if (!isset(countriesContainer)) {
		alert('Countries container was not defined');
		return;
	}
	/* regions div */
	if (!isset(regionsContainerName)) {
		var regionsContainerName = 'regionsCnt';
	}
	var regionsContainer = $(regionsContainerName);
	if (!isset(regionsContainer)) {
		alert('Regions container was not defined');
		return;	
	}
	/* cities div */
	if (!isset(citiesContainerName)) {
		var citiesContainerName = 'citiesCnt';
	}
	var citiesContainer = $(citiesContainerName);
	if (!isset(citiesContainer)) {
		alert('Cities container was not defined');
		return;	
	}
	/* define select objects */
	countriesSelectObj = countriesContainer.firstDescendant();
	if (!isset(countriesSelectObj)) {
		alert('Countries select object was not defined');
		return;
	}
	//countriesSelectObj.setAttribute('id', 'countriesSel');
	
	regionsSelectObj = regionsContainer.firstDescendant();
	if (!isset(regionsSelectObj)) {
		alert('Regions select object was not defined');
		return;
	}
	citiesSelectObj = citiesContainer.firstDescendant();
	if (!isset(citiesSelectObj)) {
		alert('Cities select object was not defined');
		return;
	}
	countriesSelectObj.observe('change', proceedCountryChange);
	regionsSelectObj.observe('change', proceedRegionChange);
}

function proceedCountryChange()
{
	emptyList(regionsSelectObj);
	emptyList(citiesSelectObj);
	countriesSelectObj.disabled = true;
	regionsSelectObj.disabled = true;
	citiesSelectObj.disabled = true;
	var request = new Ajax.Request(
			baseUrl+'/location/regions/country/'+getSelectedCountry(),
			{
				 method: 'get',
				 parameters: '',
				 onComplete: handleRegions
			}
	  );
}

function proceedRegionChange()
{
	emptyList(citiesSelectObj);
	countriesSelectObj.disabled = true;
	regionsSelectObj.disabled = true;
	citiesSelectObj.disabled = true;
	var request = new Ajax.Request(
			baseUrl+'/location/cities/region/'+getSelectedRegion()+'/country/'+getSelectedCountry(),
			{
				 method: 'get',
				 parameters: '',
				 onComplete: handleCities
			}
	  );
}

function getSelectedFromList(srcList)
{
	if ( srcList.selectedIndex == -1 ) return 0;
   if ( srcList.options.length < 1) return 0;
	return srcList[srcList.selectedIndex].value;
}
function getSelectedCountry()
{
	return getSelectedFromList(countriesSelectObj);
}
function getSelectedRegion()
{
	return getSelectedFromList(regionsSelectObj);
}
function getSelectedCity()
{
	return getSelectedFromList(citiesSelectObj);
}

function emptyList(srcList)
{
	if ( srcList.selectedIndex == -1 ) return;
   if ( srcList.options.length < 1) return;
	for( var i = srcList.options.length - 1; i >= 0; i-- )
	{
		var option = srcList.options[i];
		srcList.removeChild(option);
     
	}
}

function handleRegions(response)
{
	var refreshResponse = eval('(' + response.responseText + ')');
	var regions = refreshResponse.regions;
	var opt = document.createElement("option");
	opt.value = '0';
	opt.innerHTML = '...';
	opt.selected = true;
	regionsSelectObj.appendChild(opt);
	var count = regions.length;
	for (var i=0; i<count; i++) {
		var opt = document.createElement("option");
		opt.value = regions[i].id;
		opt.innerHTML = regions[i].name;
		opt.selected = false;
		regionsSelectObj.appendChild(opt);
	}
	countriesSelectObj.disabled = false;
	regionsSelectObj.disabled = false;
	citiesSelectObj.disabled = false;
}

function handleCities(response)
{
	var refreshResponse = eval('(' + response.responseText + ')');
	var cities = refreshResponse.cities;
	var opt = document.createElement("option");
	opt.value = '0';
	opt.innerHTML = '...';
	opt.selected = true;
	citiesSelectObj.appendChild(opt);
	var count = cities.length;
	for (var i=0; i<count; i++) {
		var opt = document.createElement("option");
		opt.value = cities[i].id;
		opt.innerHTML = cities[i].name;
		opt.selected = false;
		citiesSelectObj.appendChild(opt);
	}
	countriesSelectObj.disabled = false;
	regionsSelectObj.disabled = false;
	citiesSelectObj.disabled = false;
}