//fonction verifiant que le node est bien une liste de choix function isComboBox(node){ var result = false; if(node.tagName == 'SELECT'){ result = true; } return result; } //fonction verifiant l'affichage ou non de la combobox pour le choix de la ville function checkCountry(nodeCountryCode, nodeCityCombo, nodeCityText, nodeCityMode){ // var countryCode = nodeCountryCode.value; var countryCode = nodeCountryCode; //masquage/affichage combo/textBox if(isNational(countryCode) == true){ // cas ou le pays selectionne est la France ou un DOM affg(nodeCityCombo.id); hide(nodeCityText.id); nodeCityMode.value = "COMBO"; } else{ // cas ou le pays selectionne n'est pas la France ou un DOM hide(nodeCityCombo.id); affg(nodeCityText.id); nodeCityMode.value = ""; } } //fonction renvoyant true si le pays est national function isNational(countryCode){ if (countryCode=='I'){ return false; } else { return true; } } //instanciation des objets de communication Ajax var xmlhttp1; var xmlhttp2; //fonction de creation d'un objet xmlHttpRequest necessaire a la communication Ajax function createXmlHttpRequest(){ var xmlhttp; // code for Mozilla, etc. if (window.XMLHttpRequest){ xmlhttp = new XMLHttpRequest(); } // code for IE else if (window.ActiveXObject){ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } return xmlhttp; } //fonction chargement des villes propres au code postal function loadCity(urlAction, xmlhttp, nodeZipCode, nodeCityCombo, nodeCityText){ loadCityAndCallBack(urlAction, xmlhttp, nodeZipCode, nodeCityCombo, nodeCityText, null); } //fonction chargement des villes propres au code postal avec appel d'une fonction au retour function loadCityAndCallBack(urlAction, xmlhttp, nodeZipCode, nodeCityCombo, nodeCityText , fctCallBack){ xmlhttp = createXmlHttpRequest(); //verification qu'il existe une instance de l'objet xmlhttp if (xmlhttp != null){ //expression reguliere correspondant a un code postal valide //var patternZipCode = /\d{5}/; var zipCode = nodeZipCode.value; //on teste la validite du code postal pour savoir si on lance une requette Ajax //if(patternZipCode.test(zipCode) == true){ // d?finition de la fonction de call-back xmlhttp.onreadystatechange= function(){ processCityReply(xmlhttp, nodeCityCombo, nodeCityText, fctCallBack); }; //ecriture de l'url d'appel : action + variable code postal var url = "/cityssimo/abonnement/cityByZipCodeStubs.do?zipCode=" + zipCode; // param?trage de la requ?te (true = asynchrone) xmlhttp.open("GET",url,true); // envoi de la requ?te xmlhttp.send(null); //} //else{ //l'utilisateur a mis ajour le code postal et il ne correspond plus // a un CP valide => efface la liste des villes // if(isComboBox(nodeCityCombo)){ // nodeCityCombo.options.length = 0; // } //} } } //fonction call-back renvoyant vers la fonction de traitement de mise a jour de la liste des villes de la comboBox function processCityReply (xmlhttp, nodeCityCombo, nodeCityText, fctCallBack){ // si xmlhttp est "loaded" if (xmlhttp.readyState==4){ // si "OK" if (xmlhttp.status==200){ //la reponse Ajax est arrive, on appelle la methode de MAJ de la liste des villes if(isComboBox(nodeCityCombo)){ writeListCity(xmlhttp, nodeCityCombo, nodeCityText); } //appel de la fonction voulue if (fctCallBack != null){ fctCallBack.apply(); } } } } //place la liste des villes dans la comboBox voulue function writeListCity(xmlhttp, nodeCityCombo, nodeCityText){ // Effacer la liste des villes nodeCityCombo.options.length = 0; // Ajouter les nouvelles villes var nodeXmlCities = xmlhttp.responseXML.documentElement; var nodeXmlCity = nodeXmlCities.firstChild; var nxcfc = nodeXmlCity.firstChild; if (nxcfc!=null){ var modeValue = nxcfc.nodeValue; // nodeXmlCity = nodeXmlCity.nextSibling; var i = 0; while (nodeXmlCity!= null) { var value = nodeXmlCity.firstChild.nodeValue; nodeCityCombo.options[i++] = new Option(value, value); nodeXmlCity = nodeXmlCity.nextSibling; } //if (i==1 && modeValue=='INTERNATIONAL'){ affg(nodeCityCombo.id); hide(nodeCityText.id); //nodeCityMode.value = "COMBO"; //nodeCityText.value=value; // } else if (i==0 && modeValue=='INTERNATIONAL'){ // hide(nodeCityCombo.id); // affg(nodeCityText.id); // } //pre-selection de la ville a selectionnee selectCurrentCity(nodeCityCombo, nodeCityText); } } function trim(str) { if(str == null) { return ""; } else { //suppression d'eventuel espace : .replace(/^\s+|\s+$/, '') = trim() return str.replace(/^\s+|\s+$/, ''); } } //fonction pre-selectionnat de la ville a selectionnee function selectCurrentCity(nodeCityCombo, nodeCityText){ //reccuperation du nom de la ville selectionne auparavant var currentCityValueOrig = nodeCityText.value; // alert('currentCityValueOrig:' + currentCityValueOrig); var currentCityValue = ""; //Mise en forme du nom de la ville pour pouvoir la comparer //suppression d'eventuel espace : .replace(/^\s+|\s+$/, '') = trim() currentCityValue = trim(currentCityValueOrig); //mise en majuscule currentCityValue = currentCityValue.toUpperCase() ; //parcours de la liste des villes pour comparer a la ville a preselectionner var currentOption = null; var currentOptionText = ""; var currentOptionValue = ""; var i; for(i=0; i