// zone sélectionnée


var type_courrant=0;           //local
var statut_courrant='0';
var tab_statut = new Array("0","A","B","B1","C","D","E","F");
var ip_web ="www.sigafrique.net";
var ip_carto ="mapdmz.brgm.fr";
var path_carto = "cgi-bin/mapserv?";
var mappath_carto = "/carto/sigafrique/mapFiles/";



// tous les contextes
var context = 	new ContextM(
						"fra", 
						"EPSG:27582", 
						new Array(new Array(-7, 52), new Array(9.7, 41)), 
						new Array(new Array(40428, 2698833.8), new Array(1216896,1600797)),
						"Contexts/Metropole.xml"
					);
				

/**
 * Object that represents context.
 */
function ContextM(iName, iProjection, iBBox_max, iBBox_init, iContextURL) {

    // Properties
    this.name = iName; // Name of the context
    this.projection = iProjection; // Projection to use
    this.bbox_max = iBBox_max; // Maximum bounding box corresponding to that context (array of two points in EPSG4326)
    this.bbox_init = iBBox_init; // Init bounding box corresponding to that context (array of two points in specific projection)
    this.contextURL = iContextURL; // URL of the context file
    
}

function addGeoCarte(){
    var theme = document.getElementById('geo_theme').options[document.getElementById('geo_theme').selectedIndex].text;
    var echelle = document.getElementById('geo_theme_scale').value;
    var theme_value = document.getElementById('geo_theme').value;
    if (theme_value=="-1" || echelle=="-1")
        return;
    addLayer('http://'+ip_carto+'/'+path_carto+'map='+mappath_carto+'geocartes.map',theme_value+"_"+echelle,"G&#233;ocarte",0,1);
    var rep = "<div class='geo_carte' id='"+theme_value+"_"+echelle+"'>";
    rep+="<div style='position:absolute;top:7px;left:5px'>";
    rep+="<img src='./images/eye_on.png'  onclick=\"config.objects.mainMap.setHidden('"+theme_value+"_"+echelle+"',this.style.display=='block');this.nextSibling.style.display='block';this.style.display='none'\" style=\"display:block\"/>";
    rep+="<img src=\"./images/eye_off.png\"  onclick=\"config.objects.mainMap.setHidden('"+theme_value+"_"+echelle+"',this.style.display!='block');this.previousSibling.style.display='block';this.style.display='none'\" style=\"display:none\"/>";
    rep+="</div><div style='position:absolute;top:5px;left:28px'><img src=\"./images/rm.png\"  onclick='remGeoCarte(\""+theme_value+"_"+echelle+"\")'/></div>";
    rep+="<div style='position: absolute; left: 50px; border-left: solid 1px #EDC093; height: 27px;'>&nbsp;</div>";                                            
    rep+="<div style='position:absolute;top:1px;left:56px'>"+theme+"<br/> 1 / "+echelle+"</div></div>";
    document.getElementById('geocartes_ctrl').innerHTML+=rep;
}

function remGeoCarte(code){
    var doc = document.getElementById(code);
    doc.parentNode.removeChild(doc);
    config.objects.mainMap.setParam('deleteLayer',code);
}

function setHiddenSubPrin(hide){
    var statut = document.getElementById('statuts_gite').value;
    config.objects.mainMap.setHidden("gites_"+statut,hide);
}

function setHiddenSubSec(num,hide){
    var statut = document.getElementById('statuts_gite').value;
    config.objects.mainMap.setHidden("gites_"+sub_sec[num],hide);
}


function addSubPrin(){
    type_courrant = document.getElementById('types_gite').value;
    var type = getType(type_courrant);
    document.getElementById('sub_prin').innerHTML = type ==null ? "Aucune substance" : type.text;
    if (type==null)
        type_courrant = null;
    var rep = "<SELECT class='combo_recherche' size='11' id ='types_gite'><option value='0'>Aucune substance</option>";
	    for (var i = 0;i<types_gite.length;i++){
		        if (type_courrant!=types_gites[i].id)
		             rep+="<option value="+types_gites[i].id+">"+types_gites[i].text+"</option>";
		}
	    rep+="</SELECT>";
	document.getElementById('types_gite_combo').innerHTML=rep;	
	document.getElementById('logo_1').innerHTML=type_courrant!= null ? "<img src='./images/legende/"+type_courrant+".gif'/>" : "&nbsp;";
    setHiddenSubPrin(false);
    changeFiltre();
}

function remSubPrin(){
    type_courrant = null;
    document.getElementById('sub_prin').innerHTML = "Aucune substance";
    var rep = "<SELECT class='combo_recherche' size='11' id ='types_gite'><option value='0'>Aucune substance</option>";
	    for (var i = 0;i<types_gite.length;i++){
		        if (type_courrant!=types_gites[i].id)
		             rep+="<option value="+types_gites[i].id+">"+types_gites[i].text+"</option>";
	    }
	    rep+="</SELECT>";
	document.getElementById('types_gite_combo').innerHTML=rep;	
    document.getElementById('logo_1').innerHTML="&nbsp;";    
    changeFiltre();
}

var sub_sec = new Array();

function addSubSec(index){
    var tmp = document.getElementById('types_gite').value;    
    var type = getType(tmp);
    
    
    document.getElementById('sub_sec_'+index).innerHTML = type ==null ? "<i>Aucune substance sélectionnée</i>" : type.text;
    if (type==null)
        tmp = null;
    sub_sec[index] = tmp;
    var rep = "<SELECT class='combo_recherche' size='11' id ='types_gite'><option value='0'>Aucune substance</option>";
	    for (var i = 0;i<types_gite.length;i++){
		        var ok = (tmp!=types_gites[i].id);
		        for (var k=0;k<sub_sec.length;k++)
		            ok = ok && (sub_sec[k]!= types_gites[i].id)
		        if (ok) rep+="<option value="+types_gites[i].id+">"+types_gites[i].text+"</option>";
		}
	    rep+="</SELECT>";
	document.getElementById('types_gite_combo').innerHTML=rep;	
    document.getElementById('logo_sec_'+index).innerHTML= tmp!=null ? "<img src='./images/legende/"+type.id+".gif'/>" : "&nbsp;";
    setHiddenSubSec(index,false);
    changeFiltre();
    
}

function remSubSec(index){
    config.objects.mainMap.setHidden('gites_'+sub_sec[index],true);
    document.getElementById('sub_sec_'+index).innerHTML = "<i>Aucune substance sélectionnée</i>";
    sub_sec[index]=null;
    var rep = "<SELECT class='combo_recherche' size='11' id ='types_gite'><option value='0'>Aucune substance</option>";
	    for (var i = 0;i<types_gite.length;i++){
		        var ok = (tmp!=types_gites[i].id);
		        for (var k=0;k<sub_sec.length;k++)
		            ok = ok && (sub_sec[k]!= types_gites[i].id)
		        if (ok) rep+="<option value="+types_gites[i].id+">"+types_gites[i].text+"</option>";
		}
	    rep+="</SELECT>";
	document.getElementById('types_gite_combo').innerHTML=rep;	
    document.getElementById('logo_sec_'+index).innerHTML="&nbsp;";
    changeFiltre();
}

function nbSubSec(){
    var cpt = 0;
    for (var i=0;i<sub_sec.length;i++){
        if (sub_sec[i]!=null)
            cpt++;
    }
    return cpt;
}

var tab_layers = new Array("gites_0");

function changeFiltre(){    
    
    var nb = nbSubSec();
    var statut = document.getElementById('statuts_gite').value;
    
    //nettoyage
    for (var j=0;j<tab_layers.length;j++){    
      //  config.objects.mainMap.setHidden(tab_layers[j],true);
        config.objects.mainMap.setParam('deleteLayer',tab_layers[j]);
    }
    tab_layers = new Array();
    
    if (type_courrant=='0')
        type_courrant=null;
        
        //toutes les substances principales
        if (type_courrant==null){
            //filtre uniquement par statut
            if (nb==0){
                //chargement de la bonne couche
                addLayer('http://'+ip_carto+'/'+path_carto+'map='+mappath_carto+'sigaf.map','gites_'+statut,"G&#238;tes",0,1,"http://"+ip_web+"/Contexts/phd.sld");
                tab_layers.push('gites_'+statut);
            }
            //filtre par statut et sub sec
            else{
                for (var i=0;i<sub_sec.length;i++){ 
                    if (sub_sec[i]==null) continue;
                        addLayer('http://'+ip_carto+'/'+path_carto+'map='+mappath_carto+'gites_'+statut+'.map','gites_'+sub_sec[i],"G&#238;tes",0,1,"http://"+ip_web+"/Contexts/phd.sld");
                        tab_layers.push('gites_'+sub_sec[i]);           
                }
            }        
        }
        // substance unique
        else{
        //SLD filtre sur substance principale
                var xmlString = '<NamedLayer><Name>gites</Name><UserStyle><Name>gites</Name>';
                xmlString += '<Title>gites</Title><FeatureTypeStyle>';        
                xmlString += '<Rule>';            
                xmlString += '<ogc:Filter>';                
                xmlString += '<ogc:PropertyIsEqualTo>';
                xmlString += '<ogc:PropertyName>id</ogc:PropertyName>';
                xmlString += '<ogc:Literal>'+type_courrant+'</ogc:Literal>';
                xmlString += '</ogc:PropertyIsEqualTo>'; 
                xmlString += '</ogc:Filter>';    
                xmlString += '<PointSymbolizer>';
                xmlString += '<Geometry>';
                xmlString += '<PropertyName>locatedAt</PropertyName>';
                xmlString += '</Geometry><Graphic>';
	          xmlString += '<ExternalGraphic>';
                xmlString += '<OnlineResource xlink:type="simple" xlink:href="http://'+ip_web+'/images/legende/'+type_courrant+'.gif"/>';
                xmlString += '<Format>GIF</Format>';
                xmlString += '</ExternalGraphic>';
                xmlString += '<Size>1.0</Size>';
                xmlString += '</Graphic></PointSymbolizer>';
                xmlString += '</Rule>';                      
                xmlString += '</FeatureTypeStyle></UserStyle></NamedLayer>';  
            if (nb==0){
                //chargement de la bonne couche                 
                addLayer('http://'+ip_carto+'/'+path_carto+'map='+mappath_carto+'sigaf.map','gites_'+statut,"G&#238;tes",1,1);
                tab_layers.push('gites_'+statut);
                applySLDLayer(xmlString,'gites_'+statut); 
                config.objects.mainMap.setHidden('gites_'+statut,false);
            }
            else{
                for (var i=0;i<sub_sec.length;i++){ 
                    if (sub_sec[i]==null) continue;
                    //chargement du fichier selon statut avec sld selon substance principale  
                    addLayer('http://'+ip_carto+'/'+path_carto+'map='+mappath_carto+'gites_'+statut+'.map','gites_'+sub_sec[i],"G&#238;tes",1,1);
                    tab_layers.push('gites_'+sub_sec[i]);           
                    applySLDLayer(xmlString,'gites_'+sub_sec[i]); 
                    config.objects.mainMap.setHidden('gites_'+sub_sec[i],false);
                }
            }
        }
}

/**
 * listener pour affichage des sites
 */
function addSitListener() {
	 config.objects.mainMap.addListener("loadModel", zoomSite, config.objects.mainMap);
}



//changement de site
function changeSite(){    
    site_courrant = getSite(document.getElementById('site').value);
    if (site_courrant!=null)
        zoomSite();
}


// zoom sur le site courrant
function zoomSite(){
    zoom(parseBox2d(site_courrant.bbox));    
}


// zoom sur une zone
function zoom(bbox){
    if (bbox==null){
        alert("Géometrie de forme inconnue");
        return;
    }
    var ul = bbox[0];
    var lr = bbox[1];
    config.objects.mainMap.extent.zoomToBox(ul,lr);  
    
}

//transformation d'une box2d l2e en BBOX
function parseBox2d(box2d){    
    var reg=new RegExp("[(, )]+", "g");
    var coords = box2d.split(reg);
    var ul = new Array(parseFloat(coords[1]),parseFloat(coords[4]));
    var lr = new Array(parseFloat(coords[3]),parseFloat(coords[2]));
    return new Array(ul,lr);
}

//transforme de wgs84 en coord locales
function parseBox2dWGS84( box2d ){    
    var reg=new RegExp("[(, )]+", "g");
    var coords = box2d.split(reg);
    
    //calcul coord locales
    context = getContextFromWGS84(box2d);
    if (context==null){
       // alert("Géometrie de forme inconnue");
        return;
    }
    var ul_spe = new Array(parseFloat(coords[1]), parseFloat(coords[4]));
	var lr_spe = new Array(parseFloat(coords[3]), parseFloat(coords[2]));
	var ul = context.projection.Forward(ul_spe);
	var lr = context.projection.Forward(lr_spe);
	return new Array(ul,lr);
}



//recherche de sites
function searchSite(){    
    if (loadSites(document.getElementById('site').value.toUpperCase())){
        reinit("site");
        changeSite();        
    }
}

//remise à l'echelle
function rescale(){
    
    var echelle = document.getElementById('echelle_combo').value;
    if (document.getElementById('echelle_combo').innerHTML.indexOf('<option value="current">')>=0){
        var index = document.getElementById('echelle_combo').selectedIndex;
        document.getElementById('echelle_combo').innerHTML=document.getElementById('echelle_combo').innerHTML.substring(document.getElementById('echelle_combo').innerHTML.indexOf('</option>'));
        document.getElementById('echelle_combo').selectedIndex=index-1;
    }
    config.objects.mainMap.extent.setScale(echelle);
}


 var tmp = new Array(new Option("1 / 80 000 000","80000000",false),
                        new Option("1 / 20 000 000","20000000",false),
                        new Option("1 / 5 000 000","5000000",false),
                        new Option("1 / 2 500 000","2500000",false),
                        new Option("1 / 1 750 000","1750000",false),
                        new Option("1 / 1 000 000","1000000",false),
                        new Option("1 / 500 000","500000",false)
                    );
var last_scale=0;
 
//echelle changeante
function scale(){
    
    var lit_scale = config.objects.mainMap.extent.getScale()+0.5;
    var echelle = lit_scale.toString().split('.')[0];
   if (last_scale==echelle)
        return;
   last_scale=echelle;
   
   //echelle perso à enlever
    if (document.getElementById('echelle_combo').innerHTML.indexOf('<option value="current">')>=0){
        document.getElementById('echelle_combo').innerHTML=document.getElementById('echelle_combo').innerHTML.substring(document.getElementById('echelle_combo').innerHTML.indexOf('</option>'));
    }
    var k=0;
    
    //echelle perso à ajouter
    if (document.getElementById('echelle_combo').innerHTML.indexOf(echelle)<0){
        document.getElementById('echelle_combo').innerHTML="";
        document.getElementById('echelle_combo')[0] = new Option("1 / "+echelle,"current",true);
       
        k=1;
    }
      for (var i=0;i<tmp.length;i++){
            document.getElementById('echelle_combo')[k+i] = tmp[i];           
      }
      if (k==1)
        document.getElementById('echelle_combo').selectedIndex=0;
    
}

function addLayer(wms, layer,title,hidden, opacity,sld_file){
	
    if (wms==null || layer== null || wms=="" || layer == "")
        return;
      if (opacity==null)
		opacity=1;  
      var xmlString = "<bidon  xmlns='http://www.opengis.net/context' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.opengis.net/context http://schemas.opengis.net/context/1.0.0/context.xsd' xmlns:ogc='http://www.opengis.net/ogc' >";
      xmlString += "<Layer queryable=\"1\" hidden=\""+hidden+"\" opacity=\""+opacity+"\">";
      xmlString += "<Server service=\"OGC:WMS\" version=\"1.0.0\" title=\"OGC:WMS\">";
      xmlString += "<OnlineResource xlink:type=\"simple\" xlink:href=\""+wms+"\"/>";
      xmlString += "</Server>";
      xmlString += "<Name>"+layer+"</Name>";
      xmlString += "<Title>"+title+"</Title>";
      xmlString += "<SRS>EPSG:4326</SRS>";
      xmlString += "<FormatList>";
      xmlString += "<Format current=\"1\">image/gif</Format>";
      xmlString += "</FormatList>";      
      xmlString += "<StyleList>";
      xmlString += "<Style current='1'><SLD>";
      if (sld_file){
        xmlString+="<OnlineResource xlink:type=\"simple\" xlink:href=\""+sld_file+"\"/>";
      }
      xmlString+="</SLD></Style>";
      xmlString += "</StyleList>";      
      xmlString += "</Layer></bidon>";
     
      var dom = new DOMParser();
      var newNode = dom.parseFromString(xmlString, "text/xml").firstChild.firstChild;
      
   //  var newNode = config.objects.mainMap.doc.selectSingleNode("//LayerList").firstChild.cloneNode(true);
        config.objects.mainMap.setParam('addLayer',newNode);
     // config.objects.mainMap.doc.selectSingleNode("//LayerList").appendChild(newNode);
     
     // config.objects.mainMap.callListeners("refreshWmsLayers", layer);
}





