function SelectUpdater( idSelect, getOptionsUrl ){
	this.select = document.getElementById(idSelect);
	this.url = getOptionsUrl;
	this.request = null;
//	this.NOT_FOUND_MSG = "Valeur inconnue";
//	this.msg = document.getElementById(idMsg);
//	if( !this.msg ) {
		//log.error( "Erreur sur new SelectUpdater(..., ..., '" + idMsg + "') : " + idMsg + " introuvable"); 
//	}
}

SelectUpdater.prototype = {
		run: function(value, villeUpdaterPtoV){
			if( this.request ){
				try{
					this.request.abort();
					this.reset();
				}
				catch(exc){}
			}
			try{

				//				this.request = new XMLHttpRequest();
				
				// code pour mozilla, ffx, safari
				if (window.XMLHttpRequest) { 
					this.request = new XMLHttpRequest();
				//            if (http_request.overrideMimeType) {
				//                http_request.overrideMimeType('text/xml');
				//            }
				// code pour IE
				} else if (window.ActiveXObject) { 
					try {
						this.request = new ActiveXObject("Msxml2.XMLHTTP");
					} catch (e) {
						try {
							this.request = new ActiveXObject("Microsoft.XMLHTTP");
						} catch (e) {}
					}
				}
				if (!this.request) {
					alert('Abandon :( Impossible de creer une instance XMLHTTP');
				}								
				
				//var URL = this.url + value;// + encodeuricomponent(value);
				var URL = this.url;
				//alert( URL );
				this.request.open( "POST", URL, true );
				//this.show();
								
				var current = this;
				this.request.onreadystatechange = function(){
					try{
						if( current.request.readyState == 4){
							if( current.request.status == 200){
							//alert( URL + " 5 " + value );
								current.onload(value, villeUpdaterPtoV);
							}
							else{
							//	current.msg.innerHtml = "Erreur HTTP"
							//		+ current.request.status + " sur '"
							//		+ current.url + "'";
							}
						}
					}
					catch( exc ) {}
				}
				
			}
			catch( exc ){//alert("boboy2");
				//log.debug(exc);
			}
			//alert( value );
			//
			this.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
			this.request.send( value );
		},
		
		onload: function(value, villeUpdaterPtoV){
		
			this.select.innerHTML = "";
	//alert(" test !!! 1");
			//this.hide();
			//alert( this.request.responseText );
			//alert( "onload " + value + "  -" + this.request.responseText );
//alert(" test !!! 2");
			if( this.request.responseText.length != 0 ) {				
			//alert(" test !!! 3");
				//alert('plus que 1 cara!');
				//le résultat n'est pas vide
				var options = this.request.responseText.split(";;");
				//alert('plus que 1 cara2!');
				//alert( this.request.responseText );
				var item, option;//suppose réponse de la forme "code1=valeur1;code2=valeur2;..."
				for( var i=0 ; i<options.length ; i++ ){
					item = options[i].split("="); //value = text
					option = document.createElement( "option" );
					//option.setAttribute( "value", item[0] );
					option.setAttribute( "value", item[0] );
					option.innerHTML = item[1];
					//alert( item[0] + "  " + item[1] );
					this.select.appendChild(option);
				}
				
				//dans le cas où il n'y a qu'une seule région on affiche directement la ou les villes
				if( options.length==1 ){
					//alert( 'une seule region' );
					if( villeUpdaterPtoV != null ){
						//alert( 'villes? oui' + value );
							villeUpdaterPtoV.run( value, null );
					}
				}

				//on affiche le sélecteur qui était masqué
				//this.select.style.display = "block";				
				document.getElementById( "div_" + this.select.name ).style.display = "block";
			}
			else{
					//alert('pas de res!!');
					if( villeUpdaterPtoV != null ){
							//alert('zéro cara!');							
							villeUpdaterPtoV.run( value, null );
	//					this.msg.innerHTML = "<span style='color: red'>"
	//						+ this.NOT_FOUND_MSG + "</span>";
					}else{
	//						alert('rien rien');
					}
			}	
		},
		
		show: function() {
//			this.msg.innerHTML = "<em>En chargement ...</em>";
				alert('en cours....');
		},
		
		hide: function() {
//			this.msg.innerHTML = "";
				alert('Reçu...');
		},
		
		reset: function() {
			this.select.innerHTML = "";
			
			//on masque le selecteur
			//this.select.style.display = "none";
			document.getElementById( "div_" + this.select.name ).style.display = "none";
			
			//this.msg.innerHTML = "";
			try {
				if( this.request ){
					this.request.abort();
				}
			}
			catch( exc ) {
			//	log.debug(exc);
			}
		}
}
