dojo.require('actijscore.parser');

dojo.provide('picker.town');

dojo.declare('picker.town', null, 
{
    xhrTownURL: '',
    domNode: null,
    domCountySelect: null,    
    domTownSelect: null,
    arrHandler: [],
    
    constructor: function( params, srcNodeRef )
    {
	this.domNode = srcNodeRef;
	this.arrHandler = [];
	this.xhrTownURL = dojo.attr( dojo.query( '.jsXhrTownURL', this.domNode )[0], 'value' );
	this.domTownSelect = dojo.query( '.jsTown' , this.domNode )[0];
	
	// MODIFICATION DU DOM
	var domCountyContainer = dojo.query( '.jsCountyContainer' )[0];
	dojo.create( 'label', { 'for': 'county' , innerHTML: 'D&eacute;partement&nbsp;:' }, domCountyContainer );
	this.domCountySelect = dojo.create( 'select', { 'name': 'county', id: 'county' }, domCountyContainer );

        dojo.create( 'option', { value: 0,  innerHTML: 'Tous les départements'}, this.domCountySelect );
        dojo.create( 'option', { value: 75, innerHTML: 'Paris (75)'}, this.domCountySelect );
        dojo.create( 'option', { value: 77, innerHTML: 'Seine-et-Marne (77)'}, this.domCountySelect );
        dojo.create( 'option', { value: 78, innerHTML: 'Yvelines (78)'}, this.domCountySelect );
        dojo.create( 'option', { value: 91, innerHTML: 'Essonne (91)'}, this.domCountySelect );
        dojo.create( 'option', { value: 92, innerHTML: 'Hauts-de-Seine (92)'}, this.domCountySelect );
        dojo.create( 'option', { value: 93, innerHTML: 'Seine-Saint-Denis (93)'}, this.domCountySelect );
        dojo.create( 'option', { value: 94, innerHTML: 'Val-de-Marne (94)'}, this.domCountySelect );
        dojo.create( 'option', { value: 95, innerHTML: 'Val-d\'Oise (95)'}, this.domCountySelect );
	
	// CONNECTION
	this.arrHandler.push( dojo.connect( this.domCountySelect, 'change', this, this.xhrTown ) );
	
    },
    
    xhrTown: function()
    {
        var county = dojo.attr( this.domCountySelect, 'value' );
	
	var xhrArgs = { url: this.xhrTownURL,
                        handleAs: 'json',
                        preventCache: true,
                        content: {  county: county },
                        headers: {  'Content-Type': 'application/json',
                                    'Content-Encoding': 'utf-8'
                                    },
                        load: 	dojo.hitch( this, 'update' )
                        }
			
        dojo.xhrGet( xhrArgs );	
    },    
    
    update: function( xhrData )
    {
        dojo.empty( this.domTownSelect );
	
	dojo.create( 'option', { value: 0, innerHTML: 'Toutes les communes'}, this.domTownSelect );
	dojo.forEach(	xhrData, 
			dojo.hitch( this,
			function( town )
			{  
			    dojo.create( 'option', { value: town.insee, innerHTML: town.name + ' (' + town.zip + ')'}, this.domTownSelect );
			} ) );
    },    
    
    destroy: function()
    {
	var h;
	while ( ( h = this.arrHandler.pop() ) != undefined )
	{
	    dojo.disconnect( h );
	}
    }
});

actiJSCoreParser.addDefinition( '.jsTownPicker', picker.town, {} );
