YAHOO.namespace('matrix.dropdown');

YAHOO.matrix.dropdown.countrystate = function (country, state, url) {
	
	var country_dropdown = YAHOO.util.Dom.get(country);
	var state_dropdown = YAHOO.util.Dom.get(state);
	
	function handleStateUpdate(o) {
		var dropdown = YAHOO.util.Dom.get(state);
	
		// Save the previously selected option
		var previous_name = '';
		if (dropdown.options.selectedIndex != -1) {
			previous_name = dropdown.options[dropdown.options.selectedIndex].text.toLowerCase();
		}
		var previous_value = '';
		if (dropdown.options.selectedIndex != -1) {
			previous_value = dropdown.options[dropdown.options.selectedIndex].value.toLowerCase();
		}
		
		dropdown.options.length = 0;	
	
		var options = YAHOO.lang.JSON.parse(o.responseText);			
		
		dropdown.options[dropdown.length] = new Option('-- Select a State --', '');
		for (var option in options) {
			dropdown.options[dropdown.length] = new Option(options[option].state_name, options[option].state_abbreviation);
			if (options[option].state_abbreviation.toLowerCase() == previous_value || options[option].state_name.toLowerCase() == previous_value) {
				dropdown.options.selectedIndex = dropdown.length - 1;
			}
		}
		dropdown.options[dropdown.length] = new Option('Other', 'Other');
		if (previous_value == 'other') {
			dropdown.options.selectedIndex = dropdown.length - 1;
		}
	}
	
	function handleOnChange(e) {
		var country_name = country_dropdown.options[country_dropdown.options.selectedIndex].value;
	
		YAHOO.util.Connect.asyncRequest('GET', url + '?country_name=' + country_name, {
			success: handleStateUpdate,
			failure: function (o) {}		
		});
	}
	
	function handleOnStateChange(e) {
		if (YAHOO.util.Event.getTarget(e).value == 'Other') {
			// show the 'Other' field
		} else {
			// hide the 'Other' field
		}
	}
	
	YAHOO.util.Event.on(country_dropdown, 'change', handleOnChange);
	YAHOO.util.Event.on(state_dropdown, 'change', handleOnStateChange);
};

