var CitySelector = new Class({
       initialize: function(options){
				this.setOptions(this.getOptions(), options);
				
				if( this.options.elementToUpdate == false && this.options.zipcodeField.getParent() ) 
					this.options.elementToUpdate = this.options.zipcodeField.getParent();
				
				this.options.zipcodeField.addEvent('keyup', this.getCities.bindWithEvent( this ) );
				
				this.cityLabelElement == null
        },
	   getOptions: function(){
			return {
				zipcodeField: false,
				elementToUpdate: false,
				displayLabel: true
			};
	    },
		updateForm: function( jsonObj ){
			if( $('cityName') ) $('cityName').dispose();
			if( $('cityNameLabel') )  $('cityNameLabel').dispose();
			if( jsonObj.error == false ){
				
				var elementToAdd = '';
				if( jsonObj.cities.length > 1 ){
					elementToAdd = new Element('select',{
							'name': 'cityName',
							'id': 'cityName',
							'class': 'selectCity'
					});
					jsonObj.cities.each( function(city){
							optionElement = new Element('option',{
									'value': city.city_id
							}).set('text',city.city_name).inject( elementToAdd );
					});
				}
				else if( jsonObj.cities.length == 1 ) {
					jsonObj.cities.each( function(city){
							elementToAdd = new Element('span',{
							'name': 'cityNameSpan',
							'id': 'cityName',
							'class': 'spanCity'
							}).set('text',city.city_name);
							new Element('input',{ 'type': 'hidden' , 'name': 'cityName', 'class': 'hidden' }).setProperty('value',city.city_id).inject( elementToAdd );
					});
				}
				if( this.options.displayLabel ){
					new Element('label',{ 'id': 'cityNameLabel', 'for':'cityName' }).set('text','Ville :').inject(this.options.elementToUpdate);
				}
				
				elementToAdd.inject( this.options.elementToUpdate );
			}
			else {
				elementToAdd = new Element('span',{
							'name': 'cityNameSpan',
							'id': 'cityName',
							'class': 'spanCity errorMessage'
				}).set("html","<br />Code postal incorrect").inject(this.options.elementToUpdate);
				
				$('zipcode').value="";
			}
			
		},
		getCities: function(e){
			e = new Event(e).stop();
			e.stopPropagation();
			
			if( this.options.zipcodeField.value.length == 5 ){
				var url = "inc/json-city-load.php?zipcode="+this.options.zipcodeField.value;
				var request = new Request.JSON({url:url, 
					onComplete: this.updateForm.bind(this)
				}).get();
			}
			
			if( $('cityName') ){
				$('cityName').dispose();
			}
			if( $('cityNameLabel') ){
				$('cityNameLabel').dispose();
			}
			
		}
});
CitySelector.implement(new Options);
CitySelector.implement(new Events);