//Objet de comm AJAX
var xmlhttp=0
// Nom de l'action Generique a executer
var action = 'GenererAjaxXML'
var URLContext= '....'

/**
 * M?thode initialisant la couche XMLHttpRequest
 */
function initHTTPObject() {	
	if(window.XMLHttpRequest){ // Firefox et autres
	   xmlhttp = new XMLHttpRequest()
	}
	else if(window.ActiveXObject){ // Internet Explorer 
		 // Internet Explorer 
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
}
/**
 * M?thode qui sera appelee sur changement d'un element pere
 */
function onReadyStateChange()
{
	var result="";
	// On ne fait quelque chose que si on a tout recu et que le serveur est ok
	if(xmlhttp.readyState == 4 	// status fini
		&& xmlhttp.status == 200)	// pas d'erreur
	{

        // result = xmlHTTP.responseXML.xml;   // parse JS
		result = xmlhttp.responseText;
		result=clean(result);
        //alert('result ' + '\''+result+'\'');
		//parsing XML
		try {
			// xmlDoc.LoadXML result;   // parse JS					
			var xmlError
		    var xmlDoc = new XMLDoc(result, xmlError);
		    var action = xmlDoc.docNode;
		}
		catch (e) {				
				alert('exception sur parseXML '+result +' ' + e );
				return;
		}
		
		//Recuperation des targets

		var targets = action.getElements("target");

		// iteration sur les targets
		for (var i=0;i<targets.length;i++) {
			var newSelect="";
	
			var target = targets[i];
			var typeTarget = target.getAttribute("type");

			if (typeTarget == "CB") {
				populateComboBoxTarget(target);
			} else if (typeTarget == "T") {
				populateInputTextTarget(target);
			}
		}
		
	} else {
        // ...
    }

}

//[28-10-2009][JBN] Modification de la methode d'encodage des caracteres (support de l'UTF-8)
function urldecode(ch) {
   ch = ch.replace(/[+]/g," ")
//   return unescape(ch)
   return decodeURIComponent(ch)
}
//[16-08-2007][SVG][BUG 100] Methode Utilise pour convertir les caracteres speciaux en codage URL
//[28-10-2009][JBN] Modification de la methode d'encodage des caracteres (support de l'UTF-8)
function urlencode(ch) {
//   return escape(ch);
  return encodeURIComponent(ch);
}

function clean(cl) {
   cl = cl.replace(/%22/g,"");
   cl = cl.replace(/""""/g,"\"");
   cl = cl.replace(/""/g,"\"");
   // special clio Ragnotti car michelin.de nous balance une chaine super merdique :(
   cl = cl.replace(/\"Ragnotti/i,"Ragnotti");
   //cl = cl.replace(/<value id=\"Clio II Sport Ragnotti\">Clio+II+Sport+Ragnotti<\/value>/i,".");
   return cl
}
/**
* Generation du contenu d'un ComboBox
*/
function populateComboBoxTarget(target)
{
	// recuperation du premier element pour reecriture
	var mySelect = document.getElementById(target.getAttribute("id"));

	// vidage de la combobox
	mySelect.options.length = 1;

	// remplissage dynamique de la combobox
	var values = target.getElements("value");
	var i=0;
	for (var j=0;j<values.length;j++) {
        var value = values[j];
        
        //Le web service allemagne nous renvoie une chaine merdique sur la clio ragnotti.
        // Ragnotti sux.
        var valueId= value.getAttribute("id");
        if(value.getAttribute("id")!=null){
        	valueId = valueId.toUpperCase();
        	if(valueId.indexOf("RAGNOTTI")<1){
        		//[28-10-2009][JBN] On force le decodage du texte et de la value a ajouter au combo
				mySelect.options[i+1] = new Option(urldecode(value.getText()), urldecode(value.getAttribute("id")))
				i++;		
			}
		}
	}
}

/**
* Generation du contenu d'un input text
*/
function populateInputTextTarget(target)
{
	var mySelect = document.getElementById(target.getAttribute("id"));

	// remplissage
	var values = target.getElements("value");
	mySelect.value = urldecode(values[0].getText());
}

/**
 * Methode qui sera appelee sur changement d'un element
 */
function onChangeFather(nomFils, nomParametresTab, valeurAFiltrerTab, actionDesire, typeFils,
                        valeurSelectionne, arrayFils)
{
    var flagModif=true;
    // si le fils est present dans la JSP
	if (document.getElementById(nomFils) != null) {
        if (valeurAFiltrerTab != null) {
            var params="";
            //init ajax eventuel
            initHTTPObject();
            // On defini ce qu'on va faire quand on aura la reponse
            xmlhttp.onreadystatechange = onReadyStateChange;
            //construction de l'URL en fonction de l'action desire
            var URL = action;

            //preparation eventuelle des args en fonction du pere ET du fils
            //premier param = action desire;
            params += 'actionDesire='+actionDesire+'&';
			params += 'nomParametres=';
			for (var i=0; i<nomParametresTab.length; i++) {		
				// nom des valeurs a filtrer
    	        params += nomParametresTab[i]+'#';
    	        
			}
			params += '&';
			params += 'valeurFiltrage=';
			for (i=0; i<valeurAFiltrerTab.length; i++) {
				// nom des valeurs a filtrer
    	        params += urlencode(valeurAFiltrerTab[i])+'#'; //[16-08-2007] [SVG] [BUG 100]
			}
			params += '&';
            // nom de la valeur a selectionner
            params += 'valeurSelectionne='+valeurSelectionne+'&';
            // identifiant du fils a remplir
            params += 'target='+nomFils+'&';
            // type du fils a remplir
            params += 'typeTarget='+typeFils;
            //ouverture de l'URL desire
            xmlhttp.open("POST", URL, true);

            var contentType = 'application/x-www-form-urlencoded;charset=UTF-8';
            // TODO lire depuis le header HHTP local la valeur du charsetencoding
            xmlhttp.setRequestHeader('Content-Type', contentType);
            //envoi de la requete
            xmlhttp.send(params);
            
        } else {
            if (typeFils == 'CB') {
                document.getElementById(nomFils).selectedIndex = 0;
                document.getElementById(nomFils).options.length = 1;
            } else {
                document.getElementById(nomFils).value = "";
            }
        }
        for (i=0; i<arrayFils.length; i++) {
            if (document.getElementById(arrayFils[i]) != null) {
                document.getElementById(arrayFils[i]).selectedIndex = 0;
                document.getElementById(arrayFils[i]).options.length = 1;
            }
        }
    }
}

/**
 * Methode de chargement initial d'un composant appel? par onLoad()...
 */
function initComposant(composant)
{
	// remplissage des fils de cet objet 
	//composant
}
