function geoDropDown(countryId, stateId, cityId, url) {
	var freeInput = '<input type="text" />';
	var country   = $('#'+countryId);
	var state     = $('#'+stateId);
	var city      = $('#'+cityId);
	var startUrl  = url;
	
	if (countryId == null && city.attr('freeCity') != 1) {
		city.css('visibility', 'hidden');
		url += 'stateId/' + state.val() + '/';
		url += 'stateName/' + state.attr('name') + '/';
		url += 'cityDomId/' + (city.attr('beforeFree') != undefined ? city.attr('beforeFree') : city.attr('id')) + '/';
		url += 'cityName/' + city.attr('name') + '/';
		
		$.getJSON(url,
				  function(data) {
					  if (data[0] != '') {
						  city.parent().html(data[0]);
					  } else {
						  if (city.attr('free') != '1') {
							  var id = city.attr('id')+'_free';
						  } else {
							  var id = city.attr('id');
						  }
						  var el = $(freeInput);
						  el.attr('id', id);
						  el.attr('beforeFree', (city.attr('beforeFree') != undefined  ? city.attr('beforeFree') : city.attr('id')));
						  city.parent().html(el);
					  }
				  }
		);
	} else if (countryId != null) {
		state.css('visibility', 'hidden');
		city.css('visibility', 'hidden');
		url += 'countryId/' + country.val() + '/';
		url += 'stateDomId/' + (state.attr('beforeFree') != undefined ? state.attr('beforeFree') : state.attr('id')) + '/';
		url += 'stateName/' + state.attr('name') + '/';
		url += 'cityDomId/' + (city.attr('beforeFree') != undefined  ? city.attr('beforeFree') : city.attr('id')) + '/';
		url += 'cityName/' + city.attr('name') + '/';
		
		$.getJSON(url,
				  function(data) {
					  if (data[0] != '') {
						  state.parent().html(data[0]);
						  if (data[1] != '') {
							  city.parent().html(data[1]);
						  } else {
							  if (city.attr('free') != '1') {
								  var id = city.attr('id')+'_free';
							  } else {
								  var id = city.attr('id');
							  }
							  var el = $(freeInput);
							  el.attr('id', id);
							  el.attr('beforeFree', (city.attr('beforeFree') != undefined  ? city.attr('beforeFree') : city.attr('id')));
							  city.parent().html(el);
						  }
					  } else {
						  if (state.attr('free') != '1') {
							  var id = state.attr('id')+'_free';
						  } else {
							  var id = state.attr('id');
						  }
						  var el = $(freeInput);
						  el.attr('id', id);
						  el.attr('beforeFree', (state.attr('beforeFree') != undefined ? state.attr('beforeFree') : state.attr('id')));
						  state.parent().html(el);
						  if (city.attr('free') != '1') {
							  var id = city.attr('id')+'_free';
						  } else {
							  var id = city.attr('id');
						  }
						  var el = $(freeInput);
						  el.attr('id', id);
						  el.attr('beforeFree', (city.attr('beforeFree') != undefined  ? city.attr('beforeFree') : city.attr('id')));
						  city.parent().html(el);
					  }
	
					  if ($('#' + stateId).attr('tagName') == 'SELECT') {
					  	  $('#' + stateId).bind('change', function() {
							 geoDropDown(null, stateId, cityId, startUrl); 
					      });
					  }
				  }
		);		
	}
}
