/******************************************************************************************
 IMPORTANT: if use display property need to change to block when visible or will lose initialized value
 
 Behavior fuction info http://livepipe.net/projects/event_behavior/
******************************************************************************************/

net.principa.CountryState = Class.create();
net.principa.CountryState.prototype =
{
	countrySelect: null,
	stateSelect: null,
	altState: null,
	lastState: null,
	
	initialize: function(countrySelect, stateSelect, altState, lastState)
	{
		this.stateSelect = stateSelect;
		this.altState = altState;
		this.lastState = lastState;
		this.countrySelect = countrySelect;
		
		if(this.countrySelect)
		{
			Event.observe(this.countrySelect, 'change', delegate(this, this.onCountryChange));
		
			var value = this.countrySelect.options ? this.countrySelect.options[this.countrySelect.selectedIndex].value : this.countrySelect.value;
			if(value)
			{
				this.onCountryChange();
			}
			else
			{
				this.draw();
			}
		}
	},
	
	invalidate: function()
	{
    	this.draw();
	},

	draw: function()
	{
		var value = this.countrySelect.options ? this.countrySelect.options[this.countrySelect.selectedIndex].value : this.countrySelect.value;
		if(!value)
		{
			this.stateSelect.disabled = true;
		}
		else
		{
			this.stateSelect.disabled = false;
		}
	},
	
	onCountryChange: function()
	{
		this.invalidate();
		var value = this.countrySelect.options ? this.countrySelect.options[this.countrySelect.selectedIndex].value : this.countrySelect.value;
		//alert(value);
		var request = new Ajax.Request(
			'/ajax/getStateProvinceList.php',
			{
				method: 'get',
				parameters: 'countryid=' + value,
				onSuccess: delegate(this, this.populateStates)
			}
		);
	},

	onCountryLoad: function()
	{
		this.invalidate();

		var value = this.countrySelect.options ? this.countrySelect.options[this.countrySelect.selectedIndex].value : this.countrySelect.value;
		var request = new Ajax.Request(
			'/ajax/getStateProvinceList.php',
			{
				method: 'get',
				parameters: 'countryid=' + value,
				onSuccess: delegate(this, this.populateStates)
			}
		);
	},
	
	populateStates: function(response)
	{
		var ajaxResponse = Try.these(
			function() { return new DOMParser().parseFromString(response.responseText, 'text/xml'); },
			function() { var xmldom = new ActiveXObject('Microsoft.XMLDOM'); xmldom.loadXML(response.responseText); return xmldom; }
		);
		
		//if(!this.stateSelect.options) return;
		
		var states = ajaxResponse.getElementsByTagName('state');
		var i, option;

		this.stateSelect.options.length = 1;
		
		if(!states.length)
		{
			this.stateSelect.disabled = true;
			this.stateSelect.style.display = 'none';
			this.altState.style.display = 'inline';
			return;
		}
		
		var ar = [];
		for(i=0; i<states.length; i++)
		{
			//option = document.createElement('OPTION');
			var value = states[i].getAttribute('abbr');
			var text = states[i].getAttribute('expanded');
			
			option = new Option(text,value);

			if(option.value == this.lastState.value)
			{
				option.selected = true;
			}

			this.stateSelect.options[this.stateSelect.options.length] = option;
			ar[ar.length] = option.value;
		}

		this.stateSelect.disabled = false;
		this.stateSelect.style.display = 'inline';
		this.altState.value = '';
		this.altState.style.display = 'none';
		this.lastState.value = '';
	}
}