var Address_Selector = Class.create();
Address_Selector.prototype = {
	initialize: function(prefix) {
		this.prefix = prefix;
		this.address1 = $(prefix + '_apt');
		this.address2 = $(prefix + '_street');
		this.city = $(prefix + '_city');
		this.state = $(prefix + '_state');
		this.country = $(prefix + '_country');
		this.zip = $(prefix + '_zip');
		this.address_collection = [];
	},
	changeAddress: function(result) {
		if(this.address1 != null && result.address1 != undefined) {
			this.address1.setValue(result.address1);
		}
		if(this.address2 != null && result.address2 != undefined) {
			this.address2.setValue(result.address2);
		}
		if(this.country != null && result.country != undefined) {
			var cur_value = $F(this.country);
			this.country.setValue(result.country);
			if(cur_value != $F(this.country)) {
				this.state.repopulate('/ajax/main/getRegions?country=' + $F(this.country), {
					allowAny: false, 
					onRepopulate: function(event) {
						this.state.fire('native:change');
					}.bindAsEventListener(this)
				});
				loaded_country = $F(this.country);
				if(this.zip != undefined) {
					if(loaded_country == 'CA' || loaded_country == 'US') {
						this.zip.show();
					}else{
						this.zip.hide();
					}
				}
			}
		}
		if(this.state != null && result.state != undefined) {
			var cur_value = $F(this.state);
			this.state.setValue(result.state);
			if(cur_value != $F(this.state)) {
				this.city.repopulate('/ajax/main/getCities?region=' + $F(this.state), {
					allowAny: false
				});
				loaded_region = $F(this.state);
			}
		}
		if(this.city != null && result.city != undefined) {
			this.city.setValue(result.city);
		}
		if(this.zip != null && result.zip != undefined) {
			this.zip.setValue(result.zip);
		}
	},
	addToCache: function(type, id, address) {
		if(this.address_collection[type] == null) {
			this.address_collection[type] = [];
		}
		this.address_collection[type][id] = address;
	},
	returnCache: function(type, id) {
		if(this.address_collection[type] == null) {
			return null;
		}
		if(this.address_collection[type][id] == null) {
			return null;
		}
		return this.address_collection[type][id];
	},
	clearAddress: function() {
		this.address1.setValue('');
		this.address2.setValue('');
		this.city.setValue('');
		this.country.setValue('US');
		if(this.state.options[0].value != 'AL') {
			this.state.repopulate('/ajax/zip/getRegions?country=US' + (allow_any ? '&add_any=true' : ''), { 
				allowAny : false
			});
		}else{
			this.state.setValue('AL');
		}
	}
};
