var showingLeftMenu = true;

//Méthode d'obtention d'un objet request 
function getHttpRequest(){
	var httpRequest= null;
	try{
		httpRequest= new XMLHttpRequest();	
	}catch(e){
		try{
			httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e)
		{httpRequest = new ActiveXObject("Microsoft.XMLHTTP");}
	}
	return(httpRequest);
}

/**Méthode qui raffraichit les menus depuis la liste de classe **/
function updateFromClassList(){
	//Masquer les icones de navigation
	window.hideNavigationLinks();
	window.updateList('class');
	window.updateFromFamilyList();
	return(false);
}

/**Méthode qui raffraichit les menus depuis la liste de variables **/
function updateFromFamilyList(){
	if(document.forms[0].selClass.value != "empty"){
		//Masquer les icones de navigation
		window.hideNavigationLinks();
		window.updateList('family');
		window.updateDateBoundary();
		window.updateFromWindowList();
	 }
	return(false);
}

/** Méthode qui lance les update et vérification suite au changement du champ FAMILLE **/
function fieldFamilyChange(){
	//Mise a jour des extremums de date
	window.updateDateBoundary();
	//Mise a jour des menu depuis WINDOW
	window.updateFromWindowList();
	return(true);
}

/**Méthode qui raffraichit les menus depuis la liste de fenetre **/
function updateFromWindowList(){
	if(document.forms[0].selFam.value != "empty"){
		//Masquer les icones de navigation
		window.hideNavigationLinks();
		window.updateList('window');
	}
	return(false);
}


/**Méthode qui met à jour une liste selon le type.
  *
  *@param Type  Peut etre 'class', 'family' ou 'window'
  */
function updateList(type){
	//Actualisé l'état des contrôles
	if(document.forms[0].selWindow.disabled == true)
		document.forms[0].selWindow.disabled = false;
			
	//Obtention d'une liste d'un objet httprequest
 	var request = this.getHttpRequest();
 	if(request == null){
 		alert("Désolé, Votre navigateur ne supporte pas AJAX / Sorry, your browser don't support AJAX");
 		return;
 	}else{
 		//Obtention de l'URL
 		urlget = window.getParameterList(type);
 		//Lancer la requete
 		request.open("GET",urlget,false);
 		request.send(null);
	 		var html = "";	 
	 			//Obtention du xml 
				var xmlDoc=request.responseXML.documentElement;
				//Obtention de la liste d'option
		        var option = xmlDoc.getElementsByTagName("option");
		        //Vérification de la présence d'enregistrement
		        if(option.length == 0){
		        	if(xmlDoc.getElementsByTagName("ServiceException").length > 0)
						window.showError(xmlDoc.getElementsByTagName("ServiceException")[0].firstChild.nodeValue);
					else
						window.showError((window.lg=="fr"?"Erreur interne, si le problème persiste, svp en aviser l'administrateur":"Internal error, if the problem persists, please notify the administrator"));
		        }else{
					//Suppression de l'erreur
					window.hideError();
					
					if(type=="class")
						window.writeClassList(option);
					else if(type=="family")
						window.writeFamilyList(option);
					else if(type=="window")
						window.writeWindowList(option);
		 		}	
	}
	return(false);
}


/**Méthode qui retourne la liste de parametres sous le format HTTP
  *selon le type spécifier
  *
  *@param Type Peut etre 'class', 'family' ou 'window'
  */
function getParameterList(type){
	//Url de base
	var param = "list?lg="+lg+"&parameter="+type;
	//Vérification du type de requete et ajout des parametres obligatoires
	if(type=="family" || type=="window")
		param += "&class="+document.forms[0].selClass.value;
	if(type=="window")
		param += "&family="+document.forms[0].selFam.value+
				 "&period="+document.forms[0].txtDate.value;
	
	return(param);
}

/**Méthode qui écrit la partie relative aux classes de produits **/
function writeClassList(option){
	var previousClass = document.forms[0].selClass.value;
	//Suppression de la liste courante
	document.forms[0].selClass.options.length = 0;
	
	//Créé la nouvelle liste à partir des options
	window.buildOptionList("selClass", previousClass, option);
		
	//Vérification de l'unicité du résultat
	if(option.length == 1){
		Element.hide("selClass"); //Masquer la selection
		document.getElementById("strClass").innerHTML =  option[0].getElementsByTagName("name")[0].firstChild.nodeValue;
	}else{
		document.getElementById("strClass").innerHTML = "";
		Element.show("selClass"); //Afficher la selection
	}
	return;
}

/**Méthode qui écrit la partie relative aux variables **/
function writeFamilyList(option){
	var previousFam = document.forms[0].selFam.value;
	//Vérifier la valeur passe en parametre si le selection passe est vide
	if(previousFam == "empty")
		previousFam = window.paramFam;
	//Supprimer la liste
	document.forms[0].selFam.options.length = 0;
	
	//Créé la nouvelle liste à partir des options
	window.buildOptionList("selFam", previousFam, option);
		
	//Vérification de l'unicité du résultat
	 if(option.length == 1){
		Element.hide("selFam"); //Masquer la selection
		document.getElementById("strFam").innerHTML =  option[0].getElementsByTagName("name")[0].firstChild.nodeValue;
	}else{
		document.getElementById("strFam").innerHTML = "";
		Element.show("selFam"); //Afficher la selection
	}

	return;
}

/**Méthode qui écrit la partie relative aux fenêtres **/
function writeWindowList(option){
	Element.show('imgRefresh');
	var previousWindow = document.forms[0].selWindow.value;
	//Vérifier la valeur passe en parametre si le selection passe est vide
	if(previousWindow == "empty")
		previousWindow = window.paramWindow;
	//Supprimer la liste
	document.forms[0].selWindow.options.length = 0;
	
	if(option[0].getElementsByTagName("id")[0].firstChild.nodeValue == "empty"){
			document.getElementById("strWindow").innerHTML = "";
			document.forms[0].selWindow.disabled = true;
			Element.show("selWindow"); //Masquer la selection
			Element.hide('imgRefresh');
	}else{
		//Créé la nouvelle liste à partir des options
		window.buildOptionList("selWindow", previousWindow, option);
			
		//Vérification de l'unicité du résultat
		if(option.length == 1){
			Element.hide("selWindow"); //Masquer la selection
			document.getElementById("strWindow").innerHTML =  option[0].getElementsByTagName("name")[0].firstChild.nodeValue;
		}else{
			document.getElementById("strWindow").innerHTML = "";
			Element.show("selWindow"); //Afficher la selection
		}
	}

	return(false);
}

/** Méthode qui raffraichi les extremums de dates selon la famille selectionnee
 */
function updateDateBoundary(){
	var family = document.forms[0].selFam.value;
	
	//Obtention des parametres
	urlget = "dateboundary?family=" + family + "&lg=" + lg;
	
	//Obtention d'une liste d'un objet httprequest
 	var request = this.getHttpRequest();
 	if(request == null){
 		alert("Désolé, Votre navigateur ne supporte pas AJAX / Sorry, your browser don't support AJAX");
 		return;
 	}else{
 		//Lancer la requete
 		request.open("GET",urlget,true);
 		request.onreadystatechange=function(){
	 		if(request.readyState == 4){
	 			//Obtention du xml 
				var xmlDoc=request.responseXML.documentElement;
				//Vérification de la présence d'une erreur 
				if(xmlDoc.getElementsByTagName("ServiceException").length == 0){
					var txt = xmlDoc.getElementsByTagName("min")[0].firstChild.nodeValue + " - " +
							  xmlDoc.getElementsByTagName("max")[0].firstChild.nodeValue;
					//Modifier les valeurs des min et max pour la palette
					document.getElementById("dateboundary").innerHTML = (lg=="fr"?"Dates disponibles : ":"Available dates: ") + txt;
				}
			}
		}
		request.send(null);
		return;
 	}
}

/**Méthode qui construit une liste d'option **/
function buildOptionList(name, previousSelection, options){
	for (var i = 0; i < options.length; i++){
	  	//Vérification de la préselection de l'option
	  	var selected="";
	  	if(options[i].getElementsByTagName("id")[0].firstChild.nodeValue == previousSelection)
	  		selected = true;
		window.addOption(name, 
						 options[i].getElementsByTagName("id")[0].firstChild.nodeValue, 
						 options[i].getElementsByTagName("name")[0].firstChild.nodeValue, 
						 selected);
	}
}

/** Ajoute une option à une liste déroulante**/
function addOption(idSelect, value, text, selected)
{
	var optn = document.createElement("option");
	optn.value = value;
	optn.text = text;
	optn.selected = selected;
	document.getElementById(idSelect).options.add(optn);
}

/**Méthode centre la carte sur une région spécifié sur le serveur **/
function centerMapOnArea()
{
	var local = document.forms[0].selZone.value;
	
	if(local != ""){
	 	//Obtention d'une instance httprequest
	 	var request = this.getHttpRequest();
	 	if(request == null){
	 		alert("Désolé, Votre navigateur ne supporte pas AJAX / Sorry, your browser don't support AJAX");
	 		return;
	 	}else
	 	{
	 		request.open("GET","areainfo?area="+local,true);
	 		request.onreadystatechange=function()
	 		{
	 			if(request.readyState == 4){
	 				var xmlResponse = request.responseXML.documentElement;
	 				var latitude = xmlResponse.getElementsByTagName("lat")[0].firstChild.nodeValue;
	 				var longitude = xmlResponse.getElementsByTagName("lng")[0].firstChild.nodeValue;
	 				var zoomlevel = xmlResponse.getElementsByTagName("zoom")[0].firstChild.nodeValue;
	 				if(latitude!=null && longitude!=null)
	 					window.map.setCenter(new GLatLng(latitude, longitude), parseInt(zoomlevel));
	 			}
	 		};
	 		request.send(null);
	 	}
	}
	return;
}


/**Méthode met à jour le champ représentant la date précédante**/
function updatePreviousDate(date){
	window.G_MAP_TELE = null;
	document.forms[0].txtPrevDate.value = date;
	if(date == "")
		Element.hide("imgPrevious");
	else
		Element.show("imgPrevious");
	return;
}

/**Méthode met à jour le champ représentant la date suivante**/
function updateNextDate(date){
	window.G_MAP_TELE = null;
	if(date == "")
		Element.hide("imgNext");
	else
		Element.show("imgNext");
		
	document.forms[0].txtNextDate.value = date;
	return;
}

/**Méthode met à jour titre de la page**/
function updateTitle(){
	var html = "";
	//Produit
	/*var dropdownIndex = document.getElementById('selClass').selectedIndex;
	html = document.getElementById('selClass')[dropdownIndex].innerHTML+" &#8226; ";*/
	
	//Variable
	dropdownIndex = document.getElementById('selFam').selectedIndex;
	html += document.getElementById('selFam')[dropdownIndex].innerHTML;
	//Date
	html += " &#8226; " +  document.getElementById('txtDate').value;
	//Jours
	dropdownIndex = document.getElementById('selWindow').selectedIndex;
	html += " &#8226; " + document.getElementById('selWindow')[dropdownIndex].innerHTML;
	document.getElementById("title").innerHTML = html;
	return;
}



