  
  /* Définition d'un objet global à l'application */ 
  var glGlobal = new Object;

  /* Initialisation de l'application */        
  function init() {

      // Premier redimensionnement
      resizeDivs();
      
      // Initialise le scrolling de la partie éditoriale
      init_scroll();
      
      // Initialisation scriptaculous des champs d'autocompletion 
      glGlobal.autocomplete_voie=new Ajax.Autocompleter('id_voie', 'id_auto_complete', 'inc/index/ajax/liste_voies.php', {minChars: 1, updateElement:update_element_voie});
      glGlobal.autocomplete_voie_num1=new Ajax.Autocompleter('id_voie_num1', 'id_auto_complete', 'inc/index/ajax/liste_voienum.php', {minChars: 1, afterUpdateElement: after_update_voie_num1});
      glGlobal.autocomplete_voie_num2=new Ajax.Autocompleter('id_voie_num2', 'id_auto_complete', 'inc/index/ajax/liste_voienum.php', {minChars: 1, afterUpdateElement: after_update_voie_num2});
      glGlobal.autocomplete_parcelle_section=new Ajax.Autocompleter('id_parcelle_section', 'id_auto_complete', 'inc/index/ajax/liste_parcellesection.php', {minChars: 1, afterUpdateElement: after_update_parcelle_section});
      glGlobal.autocomplete_parcelle_num=new Ajax.Autocompleter('id_parcelle_num', 'id_auto_complete', 'inc/index/ajax/liste_parcellenum.php', {minChars: 1, afterUpdateElement: after_update_parcelle_num});
      
      // Initialisation du slider
      init_slider();

      // Initialisation OpenLayers
      init_map();

      // ajouter l'echelle graphique en bas à droite sur la carte
      // et enregistrer un callback pour modifier l'image en
      // fonction du niveau de zoom
      var img=document.createElement("img");
      img.id="scaleImg";
      img.style.zIndex=glGlobal.map.Z_INDEX_BASE['Popup']-1;
      glGlobal.map.viewPortDiv.appendChild(img);
      glGlobal.map.events.register("zoomend", glGlobal.map, on_zoom_change);
      
      // Initialisation du combobox plu
      select_plu_main=document.getElementById('id_select_plu');
      select_plu_dl = select_plu_main.getElementsByTagName("dl")[0];      
      glGlobal.select_plu_dt = select_plu_main.getElementsByTagName("dt")[0];
      glGlobal.select_plu_dd = select_plu_main.getElementsByTagName("dd")[0];
      
      glGlobal.select_plu_dt.onclick=function()
      {glGlobal.select_plu_dd.style.display="block";}

      glGlobal.select_plu_dd.onclick=function()
      {glGlobal.select_plu_dd.style.display="none";}

      glGlobal.select_plu_timeout=-1;
      select_plu_dl.onmouseover=function()
      {if (glGlobal.select_plu_timeout!=-1) {clearTimeout(glGlobal.select_plu_timeout);glGlobal.select_plu_timeout=-1}};
      
      glGlobal.select_plu_dd.onmouseout=glGlobal.select_plu_dt.onmouseout=function() 
      {glGlobal.select_plu_timeout=setTimeout('glGlobal.select_plu_dd.style.display="none";',300);}

      // Selection de la commune par defaut 
      select_commune();

      // Message d'alerte
      if (glGlobal.alerte!='')
      {
          alert(glGlobal.alerte);
          glGlobal.alerte='';
      }
  }
  
  /* Mise à jour des tailles des DIV en fonction de la taille de la fenêtre */
  function resizeDivs() {
  
      var w = 0, h = 0;
      
      if( typeof( window.innerWidth ) == 'number' ) {
      //Non-IE
      w = window.innerWidth;
      h = window.innerHeight;
      //FireFox
      if (document.body && document.body.offsetWidth)
          w=document.body.offsetWidth;
      } else if( document.documentElement &&
      ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
      //IE 6+ in 'standards compliant mode'
      w = document.documentElement.clientWidth;
      h = document.documentElement.clientHeight;
      } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
      //IE 4 compatible
      w = document.body.clientWidth;
      h = document.body.clientHeight;
      }
      
      // attention a changer ces tailles si on touche au css
      // les tailles sont mis en dur pour eviter tout probleme de compatibilité de navigateur
      if (w<950) w=950;
      //bug id mantis 001389 en 100x768 on ne veut plus d'ascenseur
      //if (h<630) h=630;
      if (h<600) h=600;

      if (h!=0 && w!=0)
      {
        	var mh=(h - 90)+"px";
        	var mw=(w - 315)+"px";
        	var il=(w - 305)+"px";
        	var tw=(w - 10)+"px";
        	
        	document.getElementById("zone_titre").style.width = tw;
        	document.getElementById("zone_edito").style.width = tw;
        	document.getElementById("zone_principale").style.height = mh;
        	document.getElementById("zone_principale").style.width = mw;
        	document.getElementById("zone_ihm").style.height = mh;
        	document.getElementById("zone_ihm").style.left = il;
        	
      }

  }
  
  
  /* Initialize le scrolling */
  function init_scroll() {
  
       	/*
      Mike's DHTML scroller (By Mike Hall)
      Last updated July 21st, 02' by Dynamic Drive for NS6 functionality
      For this and 100's more DHTML scripts, visit http://www.dynamicdrive.com
      */

      var layer;
      var mikex, mikey;
      
      // Locate placeholder layer so we can use it to position the scrollers.
      
      layer = getLayer("texte_edito");
      mikex = getPageLeft(layer);
      mikey = getPageTop(layer);
      
      // Create the first scroller and position it.
      
      glGlobal.scroller.create();
      glGlobal.scroller.hide();
      glGlobal.scroller.moveTo(mikex, mikey);
      glGlobal.scroller.setzIndex(100);
      glGlobal.scroller.show();
  }

  
  function on_zoom_change() {
      var res = "" + this.getResolution();
      var img = "img/scale-" + res.replace(/\./, '_') + ".gif";
      document.getElementById("scaleImg").src = img;
  }

  /* Accesseurs pour les variables globales */ 
  /* permettant notamment la mise à jour des paramètres qui seront passés à scriptaculous */
  function set_commune_ident(value)
  {
      glGlobal.commune_ident=value;
      var commune_ident="commune_ident="+glGlobal.commune_ident;
      var parcelle_section="&parcelle_section="+glGlobal.parcelle_section;
      glGlobal.autocomplete_voie.options.defaultParams=commune_ident;
      glGlobal.autocomplete_parcelle_section.options.defaultParams=commune_ident;
      glGlobal.autocomplete_parcelle_num.options.defaultParams=commune_ident+parcelle_section;
      glGlobal.dernier_doc_gen="";
      glGlobal.dernier_doc_com="";
  }

  function set_voie_ident(value)
  {
      glGlobal.voie_ident=value;
      var voie_ident="voie_ident="+glGlobal.voie_ident;
      glGlobal.autocomplete_voie_num1.options.defaultParams=voie_ident;
      glGlobal.autocomplete_voie_num2.options.defaultParams=voie_ident;
  }

  function set_parcelle_section(value)
  {
      glGlobal.parcelle_section=value;
      var parcelle_section="parcelle_section="+glGlobal.parcelle_section;
      var commune_ident="&commune_ident="+glGlobal.commune_ident;
      glGlobal.autocomplete_parcelle_num.options.defaultParams=parcelle_section+commune_ident;
  }

  
  /* Callback sur entrée manuelle de la voie */
  function on_change_voie()
  {
      disable_voie_num1();
      disable_voie_num2();
      set_voie_ident(null);
  }
   
  /* Callback sur entrée manuelle du numero 1 */
  function on_change_voie_num1()
  {
      disable_voie_num2();
      glGlobal.voie_num1=null;
  }

  /* Callback sur entrée manuelle du numero 2 */
  function on_change_voie_num2()
  {
      glGlobal.voie_num2=null;
  }

  /* Callback sur entrée manuelle de la section */
  function on_change_parcelle_section()
  {
      disable_parcelle_num();
      set_parcelle_section(null);
  }

  /* Callback sur entrée manuelle du numero de parcelle */
  function on_change_parcelle_numero()
  {
      glGlobal.parcelle_num=null;
  }

  /* Callback sur click sur localiser voie */
  function on_localiser_voie()
  {
      if (glGlobal.voie_ident==null)
      {
        alert("Veuillez d'abord choisir la voie");
        return;
      }
      //alert(glGlobal.voie_ident);
      //alert(glGlobal.voie_num1);
      //alert(glGlobal.voie_num2);

      var params='commune_ident='+glGlobal.commune_ident+"&voie_ident="+glGlobal.voie_ident;
      if (glGlobal.voie_num1!=null)
        params=params+"&voie_num1="+glGlobal.voie_num1;
      if (glGlobal.voie_num2!=null)
        params=params+"&voie_num2="+glGlobal.voie_num2;

      params=params+"&next=zoom_recherche_extent";
      ajax_request('extent_voie.php',params);
  }

  /* Callback sur click sur localiser parcelle */
  function on_localiser_parcelle()
  {
      if (glGlobal.parcelle_section==null)
      {
        alert("Veuillez d'abord choisir la section");
        return;
      }
      //alert(glGlobal.parcelle_section);
      //alert(glGlobal.parcelle_num);
      
      var params='commune_ident='+glGlobal.commune_ident+"&parcelle_section="+glGlobal.parcelle_section;
      if (glGlobal.parcelle_num!=null)
        params=params+"&parcelle_num="+glGlobal.parcelle_num;
      
      params=params+"&next=zoom_recherche_extent";
      ajax_request('extent_parcelle.php',params);
  }

   
  /* Callback sur mise à jour scriptaculous de la voie */
  function update_element_voie(elmt)
  {
      // desactivation temporaire de la saisie des numéros de voie 
      disable_voie_num1();
      disable_voie_num2();
      
      // reset de la partie parcelle des qu'on a choisit une voie
      reset_parcelle_section();
      
      // reformatage du contenu
      var result=elmt.innerHTML;
      var extractedResult=result.slice(result.indexOf('(')+1, result.indexOf(')'));      
      var selectobject=document.getElementById('id_voie');
      selectobject.value=extractedResult;
      glGlobal.voie_nom=extractedResult;
      
      // récupération des informations sur la commune
      // puis reactivation de la saisie du premier numéro de voie
      ajax_request('infos_voie.php','commune_ident='+glGlobal.commune_ident+'&voie_nom='+glGlobal.voie_nom+"&next=enable_voie_num1");

  }
  
  /* Callback sur mise à jour scriptaculous du premier numero de voie */
  function after_update_voie_num1()
  {
      // validation et stockage du champ
      var selectobject=document.getElementById('id_voie_num1');
      glGlobal.voie_num1=selectobject.value;
      
      // activation de la saisie du deuxieme numéro de voie 
      enable_voie_num2();
  } 

  /* Callback sur mise à jour scriptaculous du deuxieme numero de voie */
  function after_update_voie_num2()
  {
      // validation et stockage du champ
      var selectobject=document.getElementById('id_voie_num2');
      glGlobal.voie_num2=selectobject.value;
  } 

  /* Callback sur mise à jour scriptaculous de la section */
  function after_update_parcelle_section()
  {
      // reset de la partie voie dès qu'on a choisit une parcelle
      reset_voie();

      // validation et stockage du champ
      // puis activation de la saisie du numero de parcelle 
      var selectobject=document.getElementById('id_parcelle_section');
      glGlobal.parcelle_section=selectobject.value;
      ajax_request('infos_section.php','parcelle_section='+glGlobal.parcelle_section+'&next=enable_parcelle_num');
  } 

  /* Callback sur mise à jour scriptaculous du numero de parcelle */
  function after_update_parcelle_num()
  {
      // validation et stockage du champ
      var selectobject=document.getElementById('id_parcelle_num');
      glGlobal.parcelle_num=selectobject.value;
  } 



  /* reset la partie voie */
  function reset_voie()
  {
      var selectobject=document.getElementById('id_voie');
      selectobject.value="";
      on_change_voie();
  }

  /* desactivation de la saisie de la voie */
  function disable_voie()
  {
      var selectobject=document.getElementById('id_voie');
      selectobject.style.background="#DDDDDD";
      selectobject.disabled=true;
      selectobject.value="";
      set_voie_ident(null);
  }

  /* autorisation de la saisie de la voie */
  function enable_voie()
  {
      var selectobject=document.getElementById('id_voie');
      selectobject.style.background="#FFFFFF";
      selectobject.disabled=false;
  }
  
  /* desactivation de la saisie du premier numéro */
  function disable_voie_num1()
  {
      var selectobject=document.getElementById('id_voie_num1');
      selectobject.style.background="#DDDDDD";
      selectobject.disabled=true;
      selectobject.value="";
      glGlobal.voie_num1=null;
      disable_localiser_voie();
  }

  /* autorisation de la saisie du premier numéro */
  function enable_voie_num1()
  {
      var selectobject=document.getElementById('id_voie_num1');
      selectobject.style.background="#FFFFFF";
      selectobject.disabled=false;
      enable_localiser_voie();
  }

  /* desactivation de la saisie du deuxième numéro */
  function disable_voie_num2()
  {
      var selectobject=document.getElementById('id_voie_num2');
      selectobject.style.background="#DDDDDD";
      selectobject.disabled=true;
      selectobject.value="";
      glGlobal.voie_num2=null;
  }

  /* autorisation de la saisie du deuxième numéro */
  function enable_voie_num2()
  {
      var selectobject=document.getElementById('id_voie_num2');
      selectobject.style.background="#FFFFFF";
      selectobject.disabled=false;
  }

  /* reset la partie parcelle */
  function reset_parcelle_section()
  {
      var selectobject=document.getElementById('id_parcelle_section');
      selectobject.value="";
      on_change_parcelle_section();
  }

  /* desactivation de la saisie de la section */
  function disable_parcelle_section()
  {
      var selectobject=document.getElementById('id_parcelle_section');
      selectobject.style.background="#DDDDDD";
      selectobject.disabled=true;
      selectobject.value="";
      glGlobal.parcelle_section=null;
  }

  /* autorisation de la saisie de la section */
  function enable_parcelle_section()
  {
      var selectobject=document.getElementById('id_parcelle_section');
      selectobject.style.background="#FFFFFF";
      selectobject.disabled=false;
  }

  /* desactivation de la saisie du numéro de parcelle */
  function disable_parcelle_num()
  {
      var selectobject=document.getElementById('id_parcelle_num');
      selectobject.style.background="#DDDDDD";
      selectobject.disabled=true;
      selectobject.value="";
      glGlobal.parcelle_num=null;
      disable_localiser_parcelle();
  }

  /* autorisation de la saisie du numéro de parcelle */
  function enable_parcelle_num()
  {
      var selectobject=document.getElementById('id_parcelle_num');
      selectobject.style.background="#FFFFFF";
      selectobject.disabled=false;
      enable_localiser_parcelle();
  }

  /* desactivation du lien localiser voie */
  function disable_localiser_voie()
  {
      linkobject=document.getElementById('id_localiser_voie');
      linkobject.style.color="#717070";
  }

  /* autorisation du lien localiser voie */
  function enable_localiser_voie()
  {
      linkobject=document.getElementById('id_localiser_voie');
      linkobject.style.color="#ED1C2E";
  }

  /* desactivation du lien localiser parcelle */
  function disable_localiser_parcelle()
  {
      linkobject=document.getElementById('id_localiser_parcelle');
      linkobject.style.color="#717070";
  }

  /* autorisation du lien localiser parcelle */
  function enable_localiser_parcelle()
  {
      linkobject=document.getElementById('id_localiser_parcelle');
      linkobject.style.color="#ED1C2E";
  }

  /* retourne true is l'ortho est deja ajoutee a la carte, false sinon */
  function ortho_is_added()
  {
      if (glGlobal.ortho != null) {
          for (var i = 0; i < glGlobal.map.layers.length; i++)
          {
              if (glGlobal.map.layers[i] == glGlobal.ortho)
              {
                  return true;
              }
          }
      }
      return false;
  }
 
  /* Initialisation scriptaculous du slider */    
  function init_slider()
  {
      if (document.getElementById('id_handle_ortho'))
      { 
          // from the author's first demo of a vertical slider.  It begins disabled.
          var s2 = new Control.Slider('id_handle_ortho','id_track_ortho', {axis:'horizontal' });
          
          // Setting the callbacks later on
          glGlobal.ortho_opacity=0.001;
          s2.options.onChange = function(value){
            glGlobal.ortho_opacity=value;
            glGlobal.ortho.setVisibility((glGlobal.ortho_opacity>=0.1));
            glGlobal.ortho.setOpacity(glGlobal.ortho_opacity);
            if (glGlobal.ortho_opacity>=0.1 && !ortho_is_added())
            {
                glGlobal.map.addLayer(glGlobal.ortho);
            }
          };
          s2.options.onSlide = function(value){                                  
            glGlobal.ortho_opacity=value;
            glGlobal.ortho.setVisibility((glGlobal.ortho_opacity>=0.1));
            glGlobal.ortho.setOpacity(glGlobal.ortho_opacity);
            if (glGlobal.ortho_opacity>=0.1 && !ortho_is_added())
            {
                glGlobal.map.addLayer(glGlobal.ortho);
            }
          };
      }
   } 
      
  /* Callback sur le changement d'une commune */
  function select_commune() 
  {
    // reinitialisation de l'ihm
    disable_voie();
    disable_voie_num1();
    disable_voie_num2();
    disable_parcelle_section();
    disable_parcelle_num();
    
    // nettoyage de l'ihm
    glGlobal.select_plu_dt.innerHTML="&nbsp;";
    glGlobal.select_plu_dd.innerHTML="&nbsp;";
    glGlobal.select_plu_index=-1;
    
    // fermeture de la fenêtre de selection des documents
    if (glGlobal.listedoc!=null) glGlobal.listedoc.close();
    
    // récupération des informations sur la commune
    // puis remplissage de la liste des PLU
    var selectobject=document.getElementById('id_select_commune');
    glGlobal.commune_label=selectobject.options[selectobject.selectedIndex].text;
    glGlobal.commune_nom=selectobject.options[selectobject.selectedIndex].value;
    glGlobal.commune_idfichier_previous=glGlobal.commune_idfichier;
    ajax_request('infos_commune.php','commune_nom='+glGlobal.commune_nom+'&next=getListePLU');
  }

  /* Callback sur le changement d'un plu */
  function select_plu(index) 
  {
      if (index==glGlobal.select_plu_index)
        return;
        
      glGlobal.select_plu_index=index;
      
      glGlobal.plu_nom=glGlobal.select_plu_nom[glGlobal.select_plu_index];
      glGlobal.plu_idlayer=glGlobal.select_plu_idlayer[glGlobal.select_plu_index];
      
      glGlobal.select_plu_dt.innerHTML=glGlobal.plu_nom;
      
      // récupération des informations sur le plu choisi
      ajax_request('infos_plu.php','plu_idlayer='+glGlobal.plu_idlayer+'&next=affichePLU');
  }
  
  /* Callback sur le choix d'un document de la commune */
  function select_doc_com() 
  {
      // ouverture de la liste des documents dans une nouvelle fenêtre
      glGlobal.listedoc=window.open('/doccom.html','_liste_doc');
  }
  
  /* Callback sur le choix d'un document général */
  function select_doc_gen() 
  {
      // ouverture de la liste des documents dans une nouvelle fenêtre
      glGlobal.listedoc=window.open('/docgen.html','_liste_doc');
  }

  function getListePLU()
  {
      // on vient necessairement de select_commune
      // les infos de la commune sont ok donc on peut activer la recherche
      enable_voie();
      enable_parcelle_section();
      
      // recuperation de la liste des plu pour cette commune
      ajax_request('liste_plu.php','commune_idfichier='+glGlobal.commune_idfichier+'&next=defaultPLU');
  }

  function defaultPLU()
  {
      // choix du plu par défaut
      set_plu_defaut();
  } 

  function affichePLU()
  {
      // mise à jour de la carte
      set_newmap();

      // mise à jour de la légende        
      var legend=document.getElementById('id_legende');
      legend.href="data/communes/"+glGlobal.commune_idfichier+"/legende/"+glGlobal.plu_legende;
  } 

  /* Changement manuel de plu */
  function set_plu_defaut()
  {
    var selectobject=document.getElementById('id_select_plu');
    
    // premier element par defaut
    var selected=0;
    
    // puis on cherche s'il y a un plan qui correspond au plan par defaut
    for(i=0;i<glGlobal.select_plu_idlayer.length;i++)
    {
        var search_result=glGlobal.select_plu_idlayer[i].toUpperCase().search(glGlobal.plu_defaut);
        
        if (search_result!=-1)
            selected=i;
    }
    
    select_plu(selected);
  }

  var close_popup_callback = function(e) {
      if (glGlobal.feature) {
          // detruire la feature
          glGlobal.feature.destroy();
          glGlobal.feature = null;
      }
      if (glGlobal.popup) {
          // detruire la popup
          glGlobal.popup.destroy();
          glGlobal.popup = null;
      }
      OpenLayers.Event.stop(e);
  };

  function create_popup(point, value, unit) {
      var bounds = glGlobal.map.getExtent();
      var lonlat = new OpenLayers.LonLat(bounds.left, bounds.bottom);
      var size = new OpenLayers.Size(200, 100);
      var html = '<span style="font-size:small">' + value + ' ' + unit + ' environ</span>';
      glGlobal.popup = new OpenLayers.Popup.AnchoredBubble(
          "popup", lonlat, size, html, null, true, close_popup_callback
      );
      glGlobal.map.addPopup(glGlobal.popup);
  }

  function calculate_length(feature) {
      if (glGlobal.feature) {
          glGlobal.feature.destroy();
          glGlobal.feature = null;
      }
      glGlobal.feature = feature;
      if (glGlobal.popup) {
          glGlobal.popup.destroy();
          glGlobal.popup = null;
      }
      var geometry = feature.geometry;
      var length = Math.round(geometry.getLength());
      var point = geometry.components[geometry.components.length - 1];
      create_popup(point, length, 'm');
  }

  function calculate_area(feature) {
      if (glGlobal.feature) {
          glGlobal.feature.destroy();
          glGlobal.feature = null;
      }
      glGlobal.feature = feature;
      if (glGlobal.popup) {
          glGlobal.popup.destroy();
          glGlobal.popup = null;
      }
      var geometry = feature.geometry;
      var area = Math.round(geometry.getArea());
      var line = geometry.components[geometry.components.length - 1];
      var point = line.components[line.components.length - 1];
      create_popup(point, area, 'm&#178;');
  }

  /* Initialisation de la carte open layer */
  function init_map()
  {
      OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
      // onImageLoadError est surchargée pour ne rien afficher en cas
      // d'erreur sur l'affichage d'une tuile. Cette modif est nécessaire
      // parce qu'OpenLayers demande à TileCache des tuiles en dehors
      // de maxExtent, à cause d'erreur d'arrondi. Ces tuiles sont
      // toujours sur le bord donc on peut se contenter de ne rien
      // afficher
      OpenLayers.Util.onImageLoadError = function() {
          this._attempts = (this._attempts) ? (this._attempts + 1) : 1;
          if(this._attempts <= OpenLayers.IMAGE_RELOAD_ATTEMPTS) {
              this.src = this.src;
          }
          this.style.display = "none";
      };

      var options = {
          controls: [ new OpenLayers.Control.PanZoomBar() ],
          format: 'image/jpeg',
          projection: 'EPSG:27562',
          units: 'm',
          fallThrough: true // necessaire pour le fonctionnement de tooltips title
      };
      glGlobal.map=new OpenLayers.Map('map', options);

      var vectorLayer = new OpenLayers.Layer.Vector("vector");
      // indiquer que la couche vecteur est toujours "in range"
      vectorLayer.calculateInRange = function() { return true; };
      glGlobal.map.addLayer(vectorLayer);
      // changer le z-index de la couche vecteur pour etre sur
      // qu'elle soit toujours au dessus des couches WMS
      vectorLayer.setZIndex(glGlobal.map.Z_INDEX_BASE['Popup'] - 1);

      // creer les differents controles
      var zoomToMaxExtentControl = new OpenLayers.Control.ZoomToMaxExtent();
      var zoomBoxControl = new OpenLayers.Control.ZoomBox();
      var navigationControl =  new OpenLayers.Control.Navigation();
      var calculateLengthControl = new OpenLayers.Control.DrawFeature(
          vectorLayer,
          OpenLayers.Handler.Path,
          {
            featureAdded: calculate_length,
            displayClass: "olControlCalculateLength"
          }
      );
      var calculateAreaControl = new OpenLayers.Control.DrawFeature(
          vectorLayer,
          OpenLayers.Handler.Polygon,
          {
              featureAdded: calculate_area,
              displayClass: "olControlCalculateArea"
          }
      );

      // creer un panel et y ajouter les controles
      var panel = new OpenLayers.Control.Panel({defaultControl: navigationControl});
      panel.addControls([
          zoomToMaxExtentControl, zoomBoxControl, navigationControl,
          calculateLengthControl, calculateAreaControl
      ]);
      zoomToMaxExtentControl.panel_div.title = "carte générale";
      zoomBoxControl.panel_div.title = "zoom cadre";
      navigationControl.panel_div.title = "navigation";
      calculateLengthControl.panel_div.title = "mesure de distance (double-cliquer pour terminer)";
      calculateAreaControl.panel_div.title = "mesure de surface (double-cliquer pour terminer)";
      glGlobal.map.addControl(panel);

      // La taille des tuiles demandées par OpenLayers peut-être modifiée
      // en changeant les variables ci-dessous
      //OpenLayers.Map.TILE_WIDTH = 256;
      //OpenLayers.Map.TILE_HEIGHT = 256;
      glGlobal.layer=null;
      glGlobal.ortho=null;
  }

  /* Chargement d'une nouvelle carte */
  function set_newmap()
  {
      var zoom=null;
      var center=null;
      
      var bounds=eval("new OpenLayers.Bounds("+glGlobal.plu_extent+")");
      var options = {
          maxExtent: bounds,
          resolutions: glGlobal.plu_resolutions,
          isBaseLayer: true,
          reproject: false,
          buffer: 0
      };
      var params=
      {
          layers: glGlobal.plu_idlayer
      };
      
      
      // suppression du layer si deja existant
      if (glGlobal.layer!=null)
      {
          // récupération du centre et du zoom precedent
          zoom=glGlobal.map.getZoom();
          center=glGlobal.map.getCenter();
          
          glGlobal.layer.destroy();
          glGlobal.layer=null;
      }

      // creation du layer
      glGlobal.layer = new OpenLayers.Layer.WMS( 'OpenLayers WMS', 
          'tilecache/tilecache.py', params, options); 
      glGlobal.map.addLayer(glGlobal.layer);


      // layer ortho photo si present
      if (document.getElementById('id_handle_ortho'))
      { 
          var options = {
              maxExtent: bounds,
              resolutions: glGlobal.plu_resolutions,
              isBaseLayer: false,
              reproject: false,
              buffer: 0
          };
          var layerName;
          if (glGlobal.plu_idlayer.match(/^OFFI_GDL_DETAIL/) ||
	      glGlobal.plu_idlayer.match(/^OFFI_GDL_PM/)     ||
	      glGlobal.plu_idlayer.match(/^OFFI_GDL_ZPPAUP/))
          {
              // plan de detail
              layerName = glGlobal.plu_idlayer+"_ORTHO";
          }
          else
          {
              layerName = glGlobal.commune_idfichier+"_ORTHO";
          }
          var params = { layers: layerName };

          // suppresion du layer si deja existant
          if (glGlobal.ortho!=null)
          {
              glGlobal.ortho.destroy();
              glGlobal.ortho=null;
          }
      
          glGlobal.ortho = new OpenLayers.Layer.WMS( 'OpenLayers WMS', 
              'tilecache/tilecache.py', params, options);

          // opacity              
          glGlobal.ortho.setVisibility((glGlobal.ortho_opacity>=0.1));
          glGlobal.ortho.setOpacity(glGlobal.ortho_opacity); 

          if (glGlobal.ortho_opacity >= 0.1) {
              glGlobal.map.addLayer(glGlobal.ortho);
          }
      }

      // si le point d'interet est toujours dans l'extent 
      // on reste centré sur ce point
      // on garde le meme zoom
      // sinon on prend l'extent maximum
      if (center==null || glGlobal.commune_idfichier!=glGlobal.commune_idfichier_previous)
      {
          if (glGlobal.commune_idfichier!=glGlobal.commune_idfichier_previous)
          {
              glGlobal.commune_idfichier_previous = glGlobal.commune_idfichier;
          }
          glGlobal.map.zoomToMaxExtent();
      }
      else
      {
          glGlobal.map.calculateBounds();
          if (glGlobal.map.isValidLonLat(center)==false)
              glGlobal.map.zoomToMaxExtent();
          else
              glGlobal.map.setCenter(center, zoom, false, false);
      }

      on_zoom_change.call(glGlobal.map);
  }
  
  /* zoom sur l'extent obtenu lors d'une recherche */ 
  function zoom_recherche_extent()
  {
      // on ramene le resultat de la recherche dans l'extent courant
      if (glGlobal.recherche_extent_xmin<glGlobal.plu_extent_xmin)
        glGlobal.recherche_extent_xmin=glGlobal.plu_extent_xmin;
      if (glGlobal.recherche_extent_xmin>glGlobal.plu_extent_xmax)
        glGlobal.recherche_extent_xmin=glGlobal.plu_extent_xmax;
      if (glGlobal.recherche_extent_xmax<glGlobal.plu_extent_xmin)
        glGlobal.recherche_extent_xmax=glGlobal.plu_extent_xmin;
      if (glGlobal.recherche_extent_xmax>glGlobal.plu_extent_xmax)
        glGlobal.recherche_extent_xmax=glGlobal.plu_extent_xmax;
      if (glGlobal.recherche_extent_ymin<glGlobal.plu_extent_ymin)
        glGlobal.recherche_extent_ymin=glGlobal.plu_extent_ymin;
      if (glGlobal.recherche_extent_ymin>glGlobal.plu_extent_ymax)
        glGlobal.recherche_extent_ymin=glGlobal.plu_extent_ymax;
      if (glGlobal.recherche_extent_ymax<glGlobal.plu_extent_ymin)
        glGlobal.recherche_extent_ymax=glGlobal.plu_extent_ymin;
      if (glGlobal.recherche_extent_ymax>glGlobal.plu_extent_ymax)
        glGlobal.recherche_extent_ymax=glGlobal.plu_extent_ymax;
      
      // et on verifie qu'il n'en sort pas completement
      if ((glGlobal.recherche_extent_xmin==glGlobal.recherche_extent_xmax)
      ||(glGlobal.recherche_extent_ymin==glGlobal.recherche_extent_ymax))
      {
          alert("La recherche n'a pas pu aboutir, essayez une localisation différente");
      }
      else
      {
          // sinon recentre alors sur la recherche
          var bounds=new OpenLayers.Bounds(glGlobal.recherche_extent_xmin, glGlobal.recherche_extent_ymin,
          glGlobal.recherche_extent_xmax, glGlobal.recherche_extent_ymax);  
          glGlobal.map.zoomToExtent(bounds);
      }
  }

  /* appel d'une fonction AJAX */
  function ajax_request(url, data)
  {
      /* a revoir */
			/*request=new OpenLayers.Ajax.Request(
            '/inc/index/ajax/'+url,
            {
                method: 'post',
                postBody: data,
                onFailure: function() { alert('Ajax request failed'); },
                
                onSuccess: function(request) 
                { 
                  alert(request.responseText); 
                  //eval(request.responseText);
    				      if (next!=null) eval(next);
    				    }
            }
        );
      */

      var xhr_object=null;
			if(window.XMLHttpRequest) // Firefox 
				xhr_object = new XMLHttpRequest(); 
			else if(window.ActiveXObject) // Internet Explorer 
				xhr_object = new ActiveXObject('Microsoft.XMLHTTP'); 
			else { // XMLHttpRequest non supporté par le navigateur 
				alert('Votre navigateur ne supporte pas les objets XMLHTTPRequest...'); 
				return; 
			} 

			//on envoie une requete post sur la fonction
			xhr_object.open('POST', 'inc/index/ajax/'+url, true);
      
			xhr_object.onreadystatechange = function() { 
				if(xhr_object.readyState == 4)
				{
    				//alert(xhr_object.responseText);
    				eval(xhr_object.responseText);
        } 
			} 
      			
			xhr_object.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
			//alert ('data : '+data);
			xhr_object.send(data);
  } 
