// VARIABLES GLOBALES
var target_zone = "" ; // zone cible à mettre à jour (region ou sousregion)
var current_elt = "" ; // élément sur lequel s'applique l'évènement courant
var current_zone = "" ; // zone courante (pays ou region ou sousregion)
var select_pays ;
var select_region ;
var select_ssregion ;
var site_url = "/form_ajax/" ;
//var site_url = "http://www1.geneanet.org/form_ajax/" ;


/**
* Fonction qui permet de supprimer de l'affichage un ou plusieurs caractères
*/

function SupprCar(expr,a,b) 
    {
    if(document.formulaire.country.value != "" && document.formulaire.country.value == "FRA")
      {
      var i=0;
      while (i!=-1) 
         {
         i=expr.indexOf(a,i);
         if (i>=0 && i<3) 
	    {
            expr=expr.substring(0,i)+b+expr.substring(i+a.length);
            i+=b.length;
            }
	 else
	    {
	    i=-1;
	    }
         }
       }
      
   return expr;
   }


/**
* Fonction qui remplie les champs pays et region une fois ceux-ci récupérés dans la base
*/
var printZones = function (obj)
{
	// On récupère les résultats de la requête sous forme de fichier xml
	var results = obj.responseXML ;
	
	// S'il y en a
	if (results!=null)
	{
		// On récupère le nombre de ligne de résultats
		var nbrows = 0 ;
		if(!(nbrows = results.getElementsByTagName('index')[0].getAttribute('nbrows')))
		     nbrows = results.getElementsByTagName('index')[0].attributes.nbrows.value ;
		
		// on détermine quelle champ doit être mise à jour on fonction de la variable globale target_zone
		// précédemment remplie
		if(target_zone == "region") var zone = select_region ;
		if(target_zone == "subregion") var zone = select_ssregion ;/*ssregion*/
		
		// On supprime les valeurs du champ à mettre à jour...
		clearSelectElt(zone,"-") ;
		
		for(i=0;i<nbrows;i++)
		{
			var namezone = results.getElementsByTagName('name')[i].firstChild.nodeValue ;
			var symbolzone = results.getElementsByTagName('symbol')[i].firstChild.nodeValue ;
			
			var option = document.createElement("option") ;
		//	var texte_option = document.createTextNode(SupprCar(symbolzone,'F','')+" - "+namezone);
			var texte_option = document.createTextNode(symbolzone+" - "+namezone);
			option.appendChild(texte_option) ;
			option.setAttribute("value",symbolzone) ;
			zone.appendChild(option) ;
		}
		
		// Si le champ mise à jour et la région...
		if(target_zone == "region")
		{
			// alors on efface les sous régions
			clearSelectElt(select_ssregion,"-") ;
                     
                         // Si une zone est sélectionnée...
                         select_zone = current_elt.value; 
                         if ( select_zone != "" )
                            {
               
                            // on construit la requête SQL qui sera executée
                            var slc = "symbol,name" ;
                            if(target_zone == "region")
                              {
                              var frm = "geosubregion" ; target_zone="subregion" ;
                              var whr = "country=\""+select_zone+"\"" ;
                              }
                            
                            //if(target_zone == "subregion")/*ssregion*/
                              //{
                              //var frm = "geosubregion" ; target_zone="subregion" ;/*ssregion*/
                              //var whr = "country=\""+select_pays.value+"\" AND region=\""+select_zone+"\"" ;
                              //}
                            var suff = "ORDER BY symbol" ;

                            //alert("SELECT "+slc+" FROM "+frm+" WHERE "+whr+" "+suff) ; // DEBUG
                            
                            // on prépare son envoi
                            var fsc = new fastServConnection() ;
                            fsc.append_post_data("slc",""+slc) ;
                            fsc.append_post_data("frm",""+frm) ;
                            fsc.append_post_data("whr",""+whr) ;
                            fsc.append_post_data("suff",""+suff) ;
                            fsc.append_post_data("xml","1") ;
                            // on envoie la requête au fichier execDbSelect.php, les résultats seront traités
                            // par la fonction printRegions
                            fsc.bg_load_post(site_url+"execDbSelect.php", printZones) ;
                            }


                     


		}
	}
	else
	{
		alert("pb printRegions") ;
	}
}

/**
* Fonction qui permet de mettre à jour les champs region ou ssregion en fonction
* de valeur précédemment sélectionnées
*/
function getZones()
{
	// on récupère la zone selectionnée
	var select_zone = current_elt.value ;
// 	alert("current_zone = "+current_zone) ;
	// ceci afin de déterminer le champs select qui sera mis à jour
	switch(current_zone)
	{
		// Si un pays est sélectionné...
		case "country":/*pays*/
			// on mettre à jour le champ region avec les régions de ce pays
			target_zone="region" ;
			break ;
		// Si une région est sélectionnée...
		case "region":/*region*/
			// on mettre à jour le champ ssregion avec les ssregions de cette région
			target_zone="subregion" ;/*ssregion*/
			break ;
	}
	
	// Si une zone est sélectionnée...
	if ( select_zone != "" )
	{
		// on construit la requête SQL qui sera executée
		var slc = "symbol,name" ;
		if(target_zone == "region")
		{
			var frm = "georegion" ; target_zone="region" ;
			var whr = "country=\""+select_zone+"\"" ;
		}
		if(target_zone == "subregion")/*ssregion*/
		{
			var frm = "geosubregion" ; target_zone="subregion" ;/*ssregion*/
			var whr = "country=\""+select_pays.value+"\" AND region=\""+select_zone+"\"" ;
		}
		var suff = "ORDER BY symbol" ;
		
// 		alert("SELECT "+slc+" FROM "+frm+" WHERE "+whr+" "+suff) ; // DEBUG
// 		alert("2") ;
		// on prépare son envoi
		var fsc = new fastServConnection() ;
		fsc.append_post_data("slc",""+slc) ;
		fsc.append_post_data("frm",""+frm) ;
		fsc.append_post_data("whr",""+whr) ;
		fsc.append_post_data("suff",""+suff) ;
		fsc.append_post_data("xml","1") ;
		// on envoie la requête au fichier execDbSelect.php, les résultats seront traités
		// par la fonction printRegions
		fsc.bg_load_post(site_url+"execDbSelect.php", printZones) ;
	}
}
/**
* Fonction mettant plusieurs ensembles de champs multiples (pays, region, sous reg)
*/
function call2getZones1(e)
{
	// on récupère la cible de la fonction et on stocke dans une variable globale la cible de la fonction
	current_elt = getEventTarget(e) ;
	
	// on récupère le libellé de la zone sélectionnée (pays ou region)...
	current_zone = current_elt.getAttribute("class") ;
	if(!current_zone) current_zone = current_elt.className ;/* IE */
	
	// on récupère les 3 champs select liés et on les stocke dans des variables globales
	select_pays = document.getElementById("d"+current_elt.getAttribute("name").substr(1,current_elt.getAttribute("name").length)) ;
	select_region = document.getElementById("e"+current_elt.getAttribute("name").substr(1,current_elt.getAttribute("name").length)) ;
	select_ssregion = document.getElementById("f"+current_elt.getAttribute("name").substr(1,current_elt.getAttribute("name").length)) ;
	
	getZones();
}

/**
* Fonction mettant à jour un ensemble de champs multiples (pays, region, sous reg)
*/
function call2getZones2(e)
{
	// on récupère la cible de la fonction et on stocke dans une variable globale la cible de la fonction
	current_elt = getEventTarget(e) ;
	
	// on récupère le libellé de la zone sélectionnée (pays ou region)...
	current_zone = current_elt.getAttribute("name") ;
	
	// cas particuliers
	if(current_zone=="upays") current_zone="country" ;/*pays*/
	if(current_zone=="uregion") current_zone="region" ;/*region*/
	if(current_zone=="usregion") current_zone="subregion" ;/*sousregion*/
	
	getZones();
}

/**
* Fonction permettant de vider un élément select
* select_elt : élément select à vider
* emptyChar : chaîne de caractère optionnelle à mettre dans le select pour symboliser qu'il est vide
* à mettre à vide ("") si on en veut pas
*/
function clearSelectElt(select_elt,emptyChar)
{
	while(select_elt.hasChildNodes()) select_elt.removeChild(select_elt.firstChild) ;
	
	// puis on les met à vide
	var option = document.createElement("option") ;
	var texte_option = document.createTextNode(emptyChar) ;
	option.appendChild(texte_option) ;
	option.value = "";
	select_elt.appendChild(option) ;
}

// fonction qui se lance au chargement du corps de la page
function initMyJs()
{
	var paysElt = getElementsBy("select","name","country")[0] ;/*pays*/
	var regionElt = getElementsBy("select","name","region")[0] ;
	var ssregionElt = getElementsBy("select","name","subregion")[0] ;/*sousregion*/
	
	if( paysElt==null )
	{
		var paysElt = getElementsBy("select","name","upays")[0] ;
		var regionElt = getElementsBy("select","name","uregion")[0] ;
		var ssregionElt = getElementsBy("select","name","usregion")[0] ;
	}
	
	if( paysElt!=null )
	{
		// on récupère les 3 champs select liés et on les stocke dans des variables globales
		select_pays = paysElt ;
		select_region = regionElt ;
		select_ssregion = ssregionElt ;

		if( paysElt.value == "") clearSelectElt(regionElt,"-") ;
		if( paysElt.value == "" && regionElt.value == "") clearSelectElt(ssregionElt,"-");
	
		addEvent(paysElt, "change", call2getZones2) ;
		addEvent(regionElt, "change", call2getZones2) ;
	}
	else
	{
		var paysElt = getElementsBy("select","class","country") ;/*pays*/
		var regionElt = getElementsBy("select","class","region") ;
		var sousregionElt = getElementsBy("select","class","subregion") ;/*ssregion*/
		
		var nbElts = paysElt.length ;
		if(( nbElts != regionElt.length) || (regionElt.length != sousregionElt.length) || (sousregionElt.length!=paysElt.length)) return -1 ;
		for(var cpt=0 ; cpt<nbElts ; cpt++)
		{
			addEvent(paysElt[cpt], "change", call2getZones1) ;
			addEvent(regionElt[cpt], "change", call2getZones1) ;
		}
	}
}

// on lance la fonction initMyJs au chargement du corps de la page
addEvent(window, "load", initMyJs) ;
