
var CLegende=Class.create();
CLegende.prototype={
	dataViewerEnabled:false,	
	waitLegendIcon:'/dynmap/images/waitajax.gif',
	_aUpdate:-1,
	tabForcedA:[],
	initialize: function(GestEvtDyn) {
		this.gE=GestEvtDyn;
		//this.map=mainCarte;
		//this.okModif=1;
		//tableau pour connaitre la hierarchie groupe Layer
		this.tabLayersGroupe=[];
		this.tabLayersGroupeState=[];
		this.tabAnalysesGroupe=[];
		this.tabAnalysesGroupeState=[];
		//tableau d'etat des layers
		this.tabEtat=new Array();
		this.tabEtatAnalyse=[];
		this.tabmaxScale=[];
		this.tabminScale=[];
		this.tabForcedA=[];	
		this.gE.on({
			'FILTREELEMENT':this.AddFiltreElem,
			'RMFILTREELEMENT':this.RMFiltreElem,
			'NEW_STATE_LAYER_DONE':this.cocheLayerU,
			'SETNEWSTATELAYER':this.cocheLayerU,
			'SETNEWSTATEANALYSE':this.cocheAnalyseU,
			'ANALYSEMODIFIED':this.refreshAnalyse,
			'SETNEWSTATEGROUPE':this.BtncocheGroupe,
			'MAPMOVED':this.onMapMoved,
			'STATE_ANALYSE_UPDATED':this.updateStateA2,
			'SETNEWSTATEETIQUETTES':this.cocheLayerEtiquettesU,
			'CHGSTATEGROUP':this.updateLegende,
			'LEGCOUCHECLICK':this.advancedToolBar,
			'scope':this
		}
		);
	
		
	},
	AddFiltreElem:function(idcouche)
	{
		this.RMFiltreElem(idcouche);
	
		Element.show("UnFiltreCouche"+parseInt(idcouche));
		Element.hide("FiltreCouche"+parseInt(idcouche));

	},
	advancedToolBar:function(idLayer){
		if(	$('lual'+idLayer)){
			if($('lay_adv_'+idLayer)){
				Element.toggle('lual'+idLayer);
			}else{
				this.drawAdvLayer(idLayer);
			}
		}
	},
	drawAdvLayer:function(idLayer){
	  	var inputElem = document.createElement("li");
	  	inputElem.setAttribute('id','lay_adv_'+idLayer);
	  	Element.addClassName(inputElem,'layers_grp_analys_title ');
	  	Element.addClassName(inputElem,'lay_adv');
	  	inputElem.innerHTML='<span class="layers_adv_option layers_opacity" title="Vous pouvez r&eacute;gler la transparence de la couche à l\'aide des flèches.">Transparence</span> <span id="spa_opa_l'+idLayer+'" class="opacity_controler"></span>';
	  	var lay = mainCarte.layer(idLayer);
	  	
	  	var opale = this.chgOpacityl.bind(this,idLayer);
	  	var opas  = this.chgOpacityS.bind(this,idLayer);
	  	$('lual'+idLayer).appendChild(inputElem);
        var slider= new Dynmap.Extras.Slide ({'value':Math.round((1-lay.opacity)*100), 'unit':'%'}, opale , opas, 'spa_opa_l'+idLayer);
		slider.draw();
	
		// Layers
		if(lay.TYPE_LAYER!='rasterDynmap'){
			if (this.gE.hasEventListener('SHOW_DATA_LAYER')){
				inputElem = document.createElement("li");
				inputElem.setAttribute('id','layerData_'+idLayer);
				inputElem.innerHTML = '<a href="javascript:;" onclick="mainMap.eventHandler().lanceEvenement(\'SHOW_DATA_LAYER\', [\''
						+ (1000000+parseInt(idLayer))
						+ '\',{}])" class="layers_data" title="Afficher les donn&eacute;es de la couche.">Données</a>';
				
				$('lual'+idLayer).appendChild(inputElem);
			}
		}
		// Rasters
		else{
			/*inputElem = document.createElement("li");
			inputElem.setAttribute('id','rasterColor_'+idLayer);
			
			const_imageColor = '/dynmap/images/color_raster_switcher_rvb.png';
			const_imageColorOn = '/dynmap/images/color_raster_switcher_rvb_on.png';
			const_imageBlackWhite = '/dynmap/images/color_raster_switcher_nb.png';
			const_imageBlackWhiteOn  = '/dynmap/images/color_raster_switcher_nb_on.png';
			
			var imgbw  = const_imageBlackWhite;
            var imgcol = const_imageColor;
			if(lay.rasterColorMode=='rgb'){
            	imageColor = const_imageColorOn;
            	imgbw = const_imageBlackWhite;
            }else{
            	imgbw = const_imageBlackWhiteOn;
            	imageColor= const_imageColor;
            }
			
			inputElem.innerHTML = '<span class="layers_adv_option">Couleur <a href="javascript:;" onclick="mainMap.changeColorRaster(\''+idLayer+'\', \'rgb\');" id="col_a_'+idLayer+'"><img src="'+imageColor+'" id="idcol'+idLayer+'" /></a>'
					+ '<a href="javascript:;" onclick="mainMap.changeColorRaster(\''+idLayer+'\', \'grey-level\');" id="col_a_bw'+idLayer+'"><img src="'+imgbw+'" id="idbw'+idLayer+'" /></a></span>';
			
			$('lual'+idLayer).appendChild(inputElem);*/
		}
		
		Element.show('lual'+idLayer);
	},
	chgOpacityl:function(lay,op){
		mainCarte.setOpacityLayer( lay,(100-op)/100,'raster');

	},
	chgOpacityS:function(lay,op){
		mainCarte.saveOpacityLayer( lay,(100-op)/100,'raster');

	},
	RMFiltreElem:function(idcouche)
	{
		try{
		
			
			Element.hide("UnFiltreCouche"+parseInt(idcouche));
			
			var cible = "FiltreCouche"+parseInt(idcouche);
			var cibleT=$(cible);
		
			if(cibleT.getAttribute('f')){
				Element.show("FiltreCouche"+parseInt(idcouche));
			}
		}catch(e){

		}
	},
	setTitle:function(idLayer){
		//recuperation des zooms
		var TrLayer=$('trLay'+idLayer);
		try
		{
			var minScale=TrLayer.getAttribute('minscale');
			var maxScale=TrLayer.getAttribute('maxscale');
			if(minScale>parseFloat(mainCarte.dx)||maxScale<parseFloat(mainCarte.dx)){
				var texte='Couche disponible à la visualisation entre '+minScale+' et '+maxScale+' mètres';
				TrLayer.title=texte;
			}
		}catch(e)
		{
		}
	},
	cocheLayer:function(idLayer,etat){
		if(etat=="0"){
			Element.hide('igBtnCocheL'+idLayer);
			Element.show('igBtnDecocheL'+idLayer);

		}else{
			Element.hide('igBtnDecocheL'+idLayer);
			Element.show('igBtnCocheL'+idLayer);
		}
	},
	cocheLayerU:function(idLayer,etat){
		try{
			this.cocheLayer(idLayer,etat);
			this.tabEtat[parseInt(idLayer)]=etat;
			var TrLayer=$('trLay'+idLayer);
			var Groupe=TrLayer.getAttribute("groupe");
			var etat=this.verifieEtatGroupe(Groupe);
			mainCarte.tabLayers=this.tabEtat;
			if(Groupe!="-1"){
				this.cocheGroupe(Groupe,etat);
			}
		}catch(e){
		}
	},
	cocheLayerEtiquettes:function(idLayer,etat){
		if($('EtiquetteCouche'+idLayer))
		{
			if(etat=="0"){
				Element.hide('EtiquetteCouche'+idLayer);
				Element.show('EtiquetteCoucheDisabled'+idLayer);
			}else{
				Element.hide('EtiquetteCoucheDisabled'+idLayer);
				Element.show('EtiquetteCouche'+idLayer);
			}
		}
	},
	cocheLayerEtiquettesU:function(idLayer,etat){

		this.cocheLayerEtiquettes(idLayer,etat);
		//mainCarte.chgStateLayerEtiquettes(idLayer,etat);
	},
	cocheAnalyse:function(idAnalyse,etat){
		
		if(etat=="0"){
			Element.hide('igBtnCocheA'+idAnalyse);
			Element.hide('legende'+idAnalyse);
			Element.show('igBtnDecocheA'+idAnalyse);
			Element.hide('layers_analys_params_'+idAnalyse);
		}else{
			Element.hide('igBtnDecocheA'+idAnalyse);
			Element.show('igBtnCocheA'+idAnalyse);
			
			var legendItem=$('legende'+idAnalyse);
		
			if(legendItem.src.indexOf(this.waitLegendIcon)>-1){
				var attData= legendItem.getAttribute('data-dynmap-src');
				var srcot=attData.split('&refresh');
                 var srco=srcot[0]+'&refresh='+Math.random();
				legendItem.setAttribute('src',srco);
			
				
			}
			
			Element.show('legende'+idAnalyse);
			
		
		}
	},
	updateStateA2:function(evt){
		
		if(this._aUpdate!=-1 && this._aUpdate!=evt.id){
		
			this.updateStateA(evt);
		}else{
			
			this._displayParams(this._aUpdate);
			this._aUpdate=-1;
		}
	},
	updateStateA:function(evt){
		if(evt.state){
			state='1';
		}else{
			state=0;
		}
	
		this.cocheAnalyse(evt.id,state);
	},
	refreshAnalyse:function(idAnalyse){
		
		if(idAnalyse.indexOf('-')!=-1){
			tabA=idAnalyse.split('-');
			idAnalyse=tabA[0];
		}        
                var oldim=$('legende'+idAnalyse);
                if(oldim !== null){
                    var srco=oldim.src;
                    oldim.src="/dynmap/images/wait.gif";
                    srcot=srco.split('&refresh');
                    srco=srcot[0]+'&refresh='+Math.random();
                    oldim.src=srco;
                }
       this._displayParams(idAnalyse);
	},
	cocheAnalyseU:function(idAnalyse,etat){
		if(idAnalyse.indexOf('-'!=-1)){
			tabA=idAnalyse.split('-');
			idAnalyse=tabA[0];
		}
		var TrAnalyse=$('trAnalyse'+idAnalyse);
		this._aUpdate =idAnalyse;
		if(TrAnalyse){
			var Layer=TrAnalyse.getAttribute("layer");
	
			for(var i in this.tabEtatAnalyse)
			{
				if(!isNaN(parseInt(i)))
				{
					if(i!=idAnalyse)
					{
						var TrAnalyse2=$('trAnalyse'+i);
						if(TrAnalyse2){
							var Layer2=TrAnalyse2.getAttribute("layer");
		
							if(Layer==Layer2){
								this.cocheAnalyse(i,0);
							}
						}
					}
				}
			}
	
			this.cocheAnalyse(idAnalyse,etat);
	
			this.tabEtatAnalyse[parseInt(idAnalyse)]=etat;
	
			var TrAnalyse=$('trAnalyse'+idAnalyse);
	
			var Groupe=TrAnalyse.getAttribute("groupe");
		}
	},
	verifieEtatGroupe:function(idgroupe){
		var nbEtat=this.tabLayersGroupe[idgroupe].length;
		nbBoucle=nbEtat;

		for (var i=0;i<nbBoucle;i++) {
			var IdLayer=this.tabLayersGroupe[idgroupe][i];
			if(this.tabEtat[IdLayer]=="1"){

				nbEtat--;
			}
		}

		if(nbEtat==0){
			return "2";
		}else if (nbEtat<nbBoucle){
			return "1";
		}else{
			return "0";
		}
	},
	verifieEtatGroupeall:function(idgroupe){
		var nbEtat=this.tabLayersGroupe[idgroupe].length;
		nbBoucle=nbEtat;

		for (var i=0;i<nbBoucle;i++) {
			var IdLayer=this.tabLayersGroupe[idgroupe][i];
			if(this.tabEtat[IdLayer]=="1"){

				nbEtat--;
			}
		}

		if(nbEtat==0){
			return "2";
		}else if (nbEtat<nbBoucle){
			return "1";
		}else{
			return "0";
		}
	},
	chgStateGroupe:function(idGroupe,etat){

		nbBoucle=this.tabLayersGroupe[idGroupe].length-1;
		var Chaine="";
		for(var i=0;i<nbBoucle;i++){
			var IdLayer=this.tabLayersGroupe[idGroupe][i];
			Chaine+=IdLayer+'='+etat+',';
		}
		var IdLayer=this.tabLayersGroupe[idGroupe][i];
		Chaine+=IdLayer+'='+etat;
		mainCarte.chgStateGroupe(Chaine);

	},
	cocheGroupe:function(idGroupe,etat){

		if(etat=="2"){
			Element.show('igBtnCocheG'+idGroupe);
			Element.hide('igBtnDecocheG'+idGroupe);
			Element.hide('igBtnMicocheG'+idGroupe);

		}else if(etat=="1"){
			Element.show('igBtnMicocheG'+idGroupe);
			Element.hide('igBtnDecocheG'+idGroupe);
			Element.hide('igBtnCocheG'+idGroupe);


		}else{
			Element.show('igBtnDecocheG'+idGroupe);
			Element.hide('igBtnMicocheG'+idGroupe);
			Element.hide('igBtnCocheG'+idGroupe);

		}
	},
	//permet de reagir au clic d'un groupe,!!!!! ici on passe un etat decoche ou coche, alors qu'en affichage on a 3 etat
	BtncocheGroupe:function(idGroupe,etat){
		if(etat=="1"){
			this.cocheGroupe(idGroupe,"2");
		}else{
			this.cocheGroupe(idGroupe,"0");
		}
/*		var tailleTab=this.tabLayersGroupe[idGroupe].length;

		for (var i=0;i<tailleTab ;i++){
			var idLayerS=this.tabLayersGroupe[idGroupe][i];
			this.cocheLayer(idLayerS,etat);
			this.tabEtat[idLayerS]=etat;
		} */
		this.chgStateGroupe(idGroupe,etat);
	},
	// permet ne mettre à jour la legende a partir d'un chaine id1=etat1,id2=etat2...
	updateLegende:function(strGroup){
		var tab = strGroup.split(',');
		var tailleTab=tab.length;
				
		for (var i=0;i<tailleTab ;i++){
			var tabetat = tab[i].split('=');
			var etat=tabetat[1];
			var tmpetat = etat.split(':');
			if(tmpetat.length == 2){
				etat = tmpetat[0];	
			}
			
			if(tabetat[0].match('A') != null){
				var idAnalyseS = tabetat[0].substr(1);
				
				this.cocheAnalyseU(idAnalyseS,etat);
				this.tabEtatAnalyse[idAnalyseS] = etat;
			
			}else{
				var idLayerS=tabetat[0];

				this.cocheLayerU(idLayerS,etat);
				this.tabEtat[idLayerS]=etat;
			}
		}
		//1 gerer les A= du changestategroupe
		//nouvelle fonction une fois totu ca fini => si plus d'analyse visibile hop je rends visible bidule truc virtual
		//a fa rei idem a la fin d'un updateStateA
		
		
		for(var i in this.tabEtat){
			if(!isNaN(parseInt(i))){
				var layer = i;
				var trlayer = $('trLay'+layer);
				if(trlayer){
					var analysesradio = document.getElementsByClassName('radio_off');
					
					var hasanalyseactive=false;
					for(var j=0;j<analysesradio.length;j++){
						if(analysesradio[j].style.display == "none"){
							hasanalyseactive=true;
							break;
						}
					}
					if(hasanalyseactive==false && $('legendeVirtual'+layer)!=null){
						$('legendeVirtual'+layer).style.display = "";
					}
				}
			//radio_off	
			}
		}
		
		
		

//		this.chgStateGroupe(idGroupe,etat);
	},
	addLayer:function(idLayer,idgroupe,etat,minScale,maxScale,fa){
		//alert(typeof(this.tabLayersGroupe[idgroupe]));
	
		if(typeof(this.tabLayersGroupe[idgroupe])!='object'){
			this.tabLayersGroupe[idgroupe]=new Array();
		}
		this.tabLayersGroupe[idgroupe][this.tabLayersGroupe[idgroupe].length]=idLayer;
		//	alert(this.tabEtat);
		this.tabEtat[idLayer]=etat;
		this.tabminScale[idLayer]=minScale;
		this.tabmaxScale[idLayer]=maxScale;
		//mainCarte.tabLayers=this.tabEtat;
	},
	addLayers:function(layers){
			var len= layers.length;
			var aLay;
			for(var i=0;i<len;i++){
				aLay=layers[i];
				this.addLayer(aLay[0],aLay[1],aLay[2],aLay[3],aLay[4],aLay[5]  );
			}
	},
	addAnalyse:function(idAnalyse,idgroupe,etat){
		if(typeof(this.tabAnalysesGroupe[idgroupe])!='object'){
			this.tabAnalysesGroupe[idgroupe]=new Array();
		}
		this.tabAnalysesGroupe[idgroupe][this.tabAnalysesGroupe[idgroupe].length]=idAnalyse;
		this.tabEtatAnalyse[idAnalyse]=etat;

	},
	setMinMaxScale:function(curentScale){

		//var TabLayers=document.getElementsByClassName('trLayer');
		var nbLayers=this.tabEtat.length;
		
		for(var i=0;i<nbLayers;i++){
			var minScaleL=this.tabminScale[i];
			var maxScaleL=this.tabmaxScale[i];
			if(minScaleL&&maxScaleL){
				//('ok');
				idLayer=i;
				UnLayer=$('trLay'+idLayer);
				TblUnLayer=$('tblLay'+idLayer);
				TblLayOptions=$('tblLayOptions'+idLayer);
				//alert(UnLayer.getAttribute('class'));
				if( minScaleL>parseFloat(curentScale) || maxScaleL<parseFloat(curentScale)){
			
					UnLayer.setAttribute('className','layers_couch disabled');
					UnLayer.setAttribute('class','layers_couch disabled');
					//TblUnLayer.setAttribute('className','trLayer ImgHorsZoom');
					//TblUnLayer.setAttribute('class','trLayer ImgHorsZoom');
					//TblLayOptions.setAttribute('className','trLayer ImgHorsZoom');
					//TblLayOptions.setAttribute('class','trLayer ImgHorsZoom');
					
				}else{
					UnLayer.setAttribute('className','layers_couch');
					UnLayer.setAttribute('class','layers_couch');
					//TblUnLayer.setAttribute('className','trLayer');
					//TblUnLayer.setAttribute('class','trLayer');
					//TblLayOptions.setAttribute('className','trLayer');
					//TblLayOptions.setAttribute('class','trLayer');
				}
			}

		}
	
	},
	onMapMoved:function (bBoxObj){
	
		GestEvtDyn.lanceEvenement('DEBUGDYN',['map moved sur legende']);
		//alert('zoom'+bBoxObj.zoom);
		//GestEvtDyn.lanceEvenement('MAPPOVED DEMANDE'+bBoxObj+++
		this.setMinMaxScale(bBoxObj.zoom);
	},
	initializeLayersGroup:function(idgroup,force){
		switch(force){
			case "0" :break;
			case "2" :
				var state = this.verifieEtatGroupeall(idgroup);
				if(state == "0"){
					break;
				}
			case "1" :
				displayModGroupe(idgroup);
		}
	},
	addGroups:function(groups){
		var len= groups.length;
		var aLay;
		for(var i=0;i<len;i++){
			aLay=groups[i];
			this.initializeLayersGroup(aLay[0],aLay[1]  );
		}
	},
	initializeAnalysesGroup:function(idgroup,force){
		switch(force){
			case "0" :break;
			case "2" :
				var nbBoucle=this.tabAnalysesGroupe[idgroup].length;
				var state =  "0";
				for (var i=0;i<nbBoucle;i++) {
					var IdAnalyse=this.tabAnalysesGroupe[idgroup][i];
					if(this.tabEtatAnalyse[IdAnalyse]=="1"){
						state =  "1";
						break;
					}
				}
				if(state == "0"){
					break;
				}
			case "1" :
				displayModGroupeAnalyse(idgroup);
		}
	},
	_displayParams:function(ida){
		
		Element.hide('layers_analys_params_'+ida);
		var args={};
		args.analyseId = ida;
		
		
		mainMap.callRest('DynmapAnalysisFeature','getParameters',args,this._a_displayParams.bind(this,ida));
	},
	_a_displayParams:function(ida,res){
		var paramstr = "";
		
		eval('var rep = '+res.responseText);
		
		var result = rep.result;
		//console.debug("legendeUlLI reception DynmapAnalysisFeature" + result);
		var label ='';
		for ( var i in result) {
			if (typeof (result[i]) != "function") {
				
				var name = result[i].name;
				if(result[i].type == 'multiple'){
					if(result[i].labels<2){
						label =result[i].labels;
					}else{
						label='multiple';
					}
				
				}else{
					if(result[i].label!=undefined){
						label = result[i].label;
					}
				}					
				if(label=='null_value_dynmap'){
					label='';
				}
				paramstr += '<span style="display:block;"><strong style="font-size: 0.8em;">'+name+' : </strong> ';
				paramstr += '<a style="font-size: 0.9em;" href="#" title="Cliquer pour modifier les paramètres" onclick="openWidgetAnalysis(\''+ida+'\')">'+label+'</a></span>';

			}
		}
		if($('layers_analys_params_'+ida))
		{
		    $('layers_analys_params_'+ida).innerHTML = paramstr;
		    Element.show('layers_analys_params_'+ida);
		}
	}
};

function openWidgetAnalysis(analyseId){
	var infoBoxAnalyseT =mainMap.getControlsByClass('Dynmap.Widget.AnalysisInfoBox');
	var winCtrl=null;
	if(infoBoxAnalyseT.length<1){
		winCtrl=new  Dynmap.Widget.AnalysisInfoBox({'onglet':'3'},analyseId);
		mainMap.addControl(winCtrl);
	}else{
		winCtrl= infoBoxAnalyseT[0];
                winCtrl.onglet=3;
	}
	winCtrl.redraw();
}
//pour cacher//afficher les groupes de legende
function displayModGroupe(idGroupe){
	var tabGroupe=$('tabG'+idGroupe);
	if(tabGroupe.style.display==""){
		tabGroupe.style.display="none";
		Element.hide('igBtnmoinsG'+idGroupe);
		Element.show('igBtnplusG'+idGroupe);
		Element.addClassName($('lnkopengrp'+idGroupe),'layers_grp_link_close');
	}else{
		tabGroupe.style.display="";
		Element.show('igBtnmoinsG'+idGroupe);
		Element.hide('igBtnplusG'+idGroupe);
		Element.removeClassName($('lnkopengrp'+idGroupe),'layers_grp_link_close');
	}
};

//pour cacher//afficher les groupes d'analyses
function displayModGroupeAnalyse(idGroupe){
	var tabGroupe=$('tabA'+idGroupe);
	if(tabGroupe.style.display==""){
		tabGroupe.style.display="none";
		Element.hide('igBtnmoinsA'+idGroupe);
		Element.show('igBtnplusA'+idGroupe);
	}else{
		tabGroupe.style.display="";
		Element.show('igBtnmoinsA'+idGroupe);
		Element.hide('igBtnplusA'+idGroupe);
	}
};


