// VARIABLES GLOBALES
var select_pays ;
var select_region ;
var select_ssregion ;
var php_script_url = "http://www.geneastar.org/include/php/execDbSelect.php" ;


/**
* Fonction qui permet de mettre a jour les champs region ou ssregion en fonction
* de valeur precedemment selectionne
*/
function getZones(curr_zone,curr_elt)
{
	var target_zone = "" ; // zone cible �mettre �jour (region ou sousregion)
	var current_elt = curr_elt ; // ��ent sur lequel s'applique l'��ement courant
	var current_zone = curr_zone ; // zone courante (pays ou region ou sousregion)


	// on r�up�e la zone selectionn�
	var select_zone = current_elt.value ;
// 	alert("current_zone = "+current_zone) ;
	// ceci afin de d�erminer le champs select qui sera mis �jour
	switch(current_zone)
	{
		// Si un pays est s�ectionn�..
		case "pays":
			// on mettre �jour le champ region avec les r�ions de ce pays
			target_zone="region" ;
			break ;
		// Si une r�ion est s�ectionn�...
		case "region":
			// on mettre �jour le champ ssregion avec les ssregions de cette r�ion
			target_zone="ssregion" ;
			break ;
	}
	
	// Si une zone est s�ectionn�...
	if ( select_zone != "" )
	{
		// on construit la requ�e SQL qui sera execut�
		var slc = "symbol,name" ;
		if(target_zone == "region")
		{
			var frm = "georegion" ; target_zone="region" ;
			var whr = "country=\""+select_zone+"\"" ;
		}
		if(target_zone == "ssregion")
		{
			var frm = "geosubregion" ; target_zone="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") ;

/**
* Fonction qui remplie les champs pays et region une fois ceux-ci r�up�� dans la base
*/
var printZones = function (obj)
{
	// On r�up�e les r�ultats de la requ�e sous forme de fichier xml
	var results = obj.responseXML ;
	
	// S'il y en a
	if (results!=null)
	{
		// On r�up�e le nombre de ligne de r�ultats
		var nbrows = 0 ;
		if(!(nbrows = results.getElementsByTagName('index')[0].getAttribute('nbrows')))
			nbrows = results.getElementsByTagName('index')[0].attributes.nbrows.value ;
		
		// on d�ermine quelle champ doit �re mise �jour on fonction de la variable globale target_zone
		// pr��emment remplie
		if(target_zone == "region") var zone = select_region ;
		if(target_zone == "ssregion") var zone = select_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(symbolzone+" - "+namezone);
			option.appendChild(texte_option) ;
			option.setAttribute("value",symbolzone) ;
			zone.appendChild(option) ;
		}
		
		// Si le champ mise �jour et la r�ion...
		if(target_zone == "region")
		{
			// alors on efface les sous r�ions
			clearSelectElt(select_ssregion,"-") ;
		}
	}
	else
	{
		alert("pb printRegions") ;
	}
	
	if(current_zone == "pays") getSousregionsPays(current_zone,current_elt) ;
}

		// on pr�are 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�e au fichier execDbSelect.php, les r�ultats seront trait�
		// par la fonction printRegions
		fsc.bg_load_post(""+php_script_url, printZones) ;
	}
}
/**
* Fonction mettant plusieurs ensembles de champs multiples (pays, region, sous reg)
*/
function call2getZones1(e)
{
	// on r�up�e la cible de la fonction et on stocke dans une variable globale la cible de la fonction
	current_elt = getEventTarget(e) ;
	
	// on r�up�e le libell�de la zone s�ectionn� (pays ou region)...
	current_zone = current_elt.getAttribute("class") ;
	var id = current_elt.getAttribute("id") ;
	if(!current_zone) current_zone = current_elt.className ;/* IE */
	
	// on r�up�e les 3 champs select li� et on les stocke dans des variables globales
	var base_id = id.substr(current_zone.length,id.length-current_zone.length) ;
	
	select_pays = document.getElementById("pays"+base_id) ;
	select_region = document.getElementById("region"+base_id) ;
	select_ssregion = document.getElementById("sousregion"+base_id) ;
	
	getZones(current_zone,current_elt);
}

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

	getZones(current_zone,current_elt);
}

function getSousregionsPays(curr_zone,curr_elt)
{
	var target_zone = "" ; // zone cible �mettre �jour (region ou sousregion)
	var current_elt = curr_elt ; // ��ent sur lequel s'applique l'��ement courant
	var current_zone = curr_zone ; // zone courante (pays ou region ou sousregion)

	// on r�up�e la zone selectionn�
	var select_zone = current_elt.value ;
	// ceci afin de d�erminer le champs select qui sera mis �jour
	
	// Si une zone est s�ectionn�...
	if ( select_zone != "" )
	{
		// on construit la requ�e SQL qui sera execut�
		var slc = "symbol,name" ;
		var frm = "geosubregion" ; target_zone="ssregion" ;
		var whr = "country=\""+select_pays.value+"\"" ;
		var suff = "ORDER BY symbol" ;
		
// 		alert("SELECT "+slc+" FROM "+frm+" WHERE "+whr+" "+suff) ; // DEBUG
		
		/**
		* Fonction qui remplie les champs pays et region une fois ceux-ci r�up�� dans la base
		*/
		var printZones = function (obj)
		{
			// On r�up�e les r�ultats de la requ�e sous forme de fichier xml
			var results = obj.responseXML ;
			
			// S'il y en a
			if (results!=null)
			{
				// On r�up�e le nombre de ligne de r�ultats
				var nbrows = 0 ;
				if(!(nbrows = results.getElementsByTagName('index')[0].getAttribute('nbrows')))
					nbrows = results.getElementsByTagName('index')[0].attributes.nbrows.value ;
				
				// on d�ermine quelle champ doit �re mise �jour on fonction de la variable globale target_zone
				// pr��emment remplie
				var zone = select_ssregion ;
// 				alert("zone = "+zone) ;
				
				// 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(symbolzone+" - "+namezone);
					option.appendChild(texte_option) ;
					option.setAttribute("value",symbolzone) ;
					zone.appendChild(option) ;
				}
				
				// Si le champ mise �jour et la r�ion...
				if(target_zone == "region")
				{
					// alors on efface les sous r�ions
					clearSelectElt(select_ssregion,"-") ;
				}
			}
			else
			{
				alert("pb printRegions") ;
			}
		}
		// on pr�are 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�e au fichier execDbSelect.php, les r�ultats seront trait�
		// par la fonction printRegions
		fsc.bg_load_post(""+php_script_url, printZones) ;
	}
}


/**
* Fonction permettant de vider un ��ent select
* select_elt : ��ent select �vider
* emptyChar : cha�e de caract�e 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","pays")[0] ;
	var regionElt = getElementsBy("select","name","region")[0] ;
	var ssregionElt = getElementsBy("select","name","sousregion")[0] ;
	
	if( paysElt!=null )
	{
		// on r�up�e les 3 champs select li� et on les stocke dans des variables globales
		select_pays = paysElt ;
		select_region = regionElt ;
		select_ssregion = ssregionElt ;
		
		if( paysElt.value == "") clearSelectElt(regionElt,"-") ;
		if( regionElt.value == "") clearSelectElt(ssregionElt,"-");
	
		addEvent(paysElt, "change", call2getZones2) ;
		addEvent(regionElt, "change", call2getZones2) ;
	}
	else
	{
		var paysElt = getElementsBy("select","class","pays") ;
		var regionElt = getElementsBy("select","class","region") ;
		var sousregionElt = getElementsBy("select","class","sousregion") ;
		var champs_multiples = false ;

                if(paysElt!=null && paysElt.length > 0)
                {
		
			var classes = paysElt[0].getAttribute("class") ;
			if(!classes) classes = paysElt[0].className ;
			champs_multiples = (classes.search(/.*only.*/)==-1);

			var nbElts = paysElt.length ;
			if(( nbElts != regionElt.length) || (regionElt.length != sousregionElt.length) || (sousregionElt.length!=paysElt.length)) return -1 ;
			if(nbElts>1) champs_multiples = true ;
			
			
			if(!champs_multiples)
			{
				// on r�up�e les 3 champs select li� et on les stocke dans des variables globales
				select_pays = paysElt[0] ;
				select_region = regionElt[0] ;
				select_ssregion = sousregionElt[0] ;
				
				if( select_pays.value == "") clearSelectElt(select_region,"-") ;
				if( select_region.value == "") clearSelectElt(select_ssregion,"-");
		
				addEvent(select_pays, "change", call2getZones2) ;
				addEvent(select_region, "change", call2getZones2) ;
			}
			else
			{
				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) ;
