/*
 * Copyright © 2008  Neogeo Technologies, Toulouse, France

 * This file is part of Opencarto web map publishing system project
 *
 * Opencarto is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Opencarto is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with Opencarto.  If not, see <http://www.gnu.org/licenses/>.
 */

var panel;
var oLayer; 
var timeOutInit = window.setTimeout("",100);
var timerInfoPanneau ;
var close_popup_callback = function(e) {
opencarto.vectorLayer.setZIndex(opencarto.map.Z_INDEX_BASE['Popup'] - 1);
if (opencarto.vector) {
   opencarto.vector.destroy();
   opencarto.vector = null;
}
if (opencarto.popup) {
opencarto.popup.destroy();
opencarto.popup = null;
}
OpenLayers.Event.stop(e);
};

function create_popup(point, value) {
   
    
   var lonlat = new OpenLayers.LonLat(point.x, point.y);
    var html = '<span style="font-size:small;overflow:scroll">' + value + '</span>';
   nbLignes = html.split('\n').length
   opencarto.popup = new OpenLayers.Popup.FramedCloud("popup", 
      lonlat,
      new OpenLayers.Size(250,nbLignes * 12),
      html,
      null,
      true,close_popup_callback);
      opencarto.map.addPopup(opencarto.popup);
}
function getFeatureInfo(feature) {
    
    if (opencarto.vector) {
        opencarto.vector.destroy();
        opencarto.vector = null;
   }

    opencarto.vector = feature;
    if (opencarto.popup) {
        opencarto.popup.destroy();
        opencarto.popup = null;
        
    }
    for (i=0;i<opencarto.map.popups.length;i++)
         opencarto.map.removePopup(opencarto.map.popups[i]);
    opencarto.vectorLayer.setZIndex(opencarto.map.Z_INDEX_BASE['Popup'] - 1);
    var geometry = feature.geometry;
    opencarto.actualGeometry = geometry;

    var bounds = opencarto.map.getExtent();
    BBOX = bounds.left + "," + bounds.bottom + "," + bounds.right + "," + bounds.top;
    WIDTH = opencarto.map.size.w;
    HEIGHT = opencarto.map.size.h;
    var map_resolution = 9783.93961875
    if( opencarto.map.resolution ){
        map_resolution = opencarto.map.resolution;
    }
    X = (feature.geometry.x - bounds.left)/map_resolution;
    Y = -(feature.geometry.y - bounds.top)/map_resolution;
    var url = 'info/?X='+X+'&Y='+Y+'&BBOX='+BBOX+'&WIDTH='+WIDTH+'&HEIGHT='+HEIGHT+'&layers='
    visibleLayers = opencarto.map.getLayersBy('visibility',true);
    layersToQuery = new Array();       
    for (i=0;i<visibleLayers.length;i++)
    {
        for (j=0;j<opencarto.gisobjects.layers.length;j++)
        {
            myLayer = opencarto.gisobjects.layers[j];
            
            if (visibleLayers[i].name == myLayer.name && visibleLayers[i].calculateInRange() && myLayer.name != 'Google Layer')
                layersToQuery.push(myLayer.options.layerid);

        }
    }
    if (layersToQuery.length > 0){
     url += layersToQuery.join(',');
     OpenLayers.loadURL(url, '', this, displayInfo);
    }
    else{
     Ext.Msg.show({
            title: oMessages.be_carefull,
            msg: oMessages.no_reach_layer,
            buttons: Ext.Msg.OK,
            icon: Ext.MessageBox.ERROR
        });
      if (opencarto.vector) {
        opencarto.vector.destroy();
        opencarto.vector = null;
     }
    }
    
}


function encode_utf8( s )
{
  return unescape( encodeURIComponent( s ) );
}

function decode_utf8( s )
{
  //return decodeURIComponent( escape( s ) );
	return decodeURIComponent( s );
}

function displayInfo(request){
  
   var lonlat = new OpenLayers.LonLat(opencarto.actualGeometry.x, opencarto.actualGeometry.y);
   var mytxt = request.responseText 
   var html = '<span style="font-size:small;overflow:scroll">' + decode_utf8(mytxt) + '</span>';
   nbLignes = request.responseText.split('\n').length
   opencarto.popup = new OpenLayers.Popup.FramedCloud("popup", 
      lonlat,
      new OpenLayers.Size(250,nbLignes * 12),
      html,
      null,
      true,close_popup_callback);
      opencarto.map.addPopup(opencarto.popup);
}

function calculate_length(feature) {
   if (opencarto.vector) {
      opencarto.vector.destroy();
      opencarto.vector = null;
   }

   opencarto.vector = feature;
   if (opencarto.popup) {
      opencarto.popup.destroy();
      opencarto.popup = null;
   }
   var geometry = feature.geometry;
   if (globalParams.googlelayer)
      var perim = geometry.getGeodesicLength(opencarto.map.getProjectionObject());   
   else
   	var perim = Math.round(geometry.getLength());
  
   if (perim > 1000)
      perim = Math.round(perim / 100) / 10 + ' km';
   else
      perim = perim + ' m';
   var point = geometry.components[geometry.components.length - 1];
   create_popup(point, perim);
}

function calculate_area(feature) {
  
   if (opencarto.vector) {
      opencarto.vector.destroy();
      opencarto.vector = null;
   }

   opencarto.vector = feature;
   if (opencarto.popup) {
      opencarto.popup.destroy();
      opencarto.popup = null;
   }
   var geometry = feature.geometry;
   if (globalParams.googlelayer)
      var area = geometry.getGeodesicArea(opencarto.map.getProjectionObject());   
   else
   	var area = Math.round(geometry.getArea());
   
   if (area > 1000000)
      area = Math.ceil(area / 10000) / 100 + ' km²';
   else
      area = area + ' m²';
   if (globalParams.googlelayer)
      var perim = geometry.getGeodesicLength(opencarto.map.getProjectionObject());   
   else
   	var perim = Math.round(geometry.getLength());
   	
   if (perim > 1000)
      perim = Math.ceil(perim / 10) /100+ ' km';
   else
      perim = perim + ' m';
   var line = geometry.components[geometry.components.length - 1];
   var point = line.components[line.components.length - 1];
   var info = oMessages.perimeter_txt + ' : ' + perim + '<br />\n'+ oMessages.area_txt + ' : ' + area;
   create_popup(point, info);
}
 
function displayLayer(layerName,v){
   ls = opencarto.map.getLayersByName(layerName);
   for (j=0;j<ls.length;j++)
   {           
       if (ls[j].name == layerName) {                 
           ls[j].setVisibility(v); 
      }
   }
}



function loadCapabilities(request) {
      
   var format = new OpenLayers.Format.XML();
   var capa = format.read(request.responseText);
   var result = new Array();
   var parurl = document.getElementById('wmsurlcur').value ;
    
   if (capa.getElementsByTagName('Layer').length > 0) {
      layers = capa.getElementsByTagName('Layer').item(0).getElementsByTagName('Layer');
      for(i=0;i<layers.length;i++){
         result[i] = new Array();
         layer = layers.item(i);
         for(var k=0;k<layer.childNodes.length;k++){
            attr = 	layer.childNodes[k];
            if(attr.tagName && attr.firstChild){
               if(attr.tagName == 'Name' || attr.tagName == 'Title' || attr.tagName == 'SRS'){     					
                  //alert(i + " : "+attr.tagName +" ==>"+attr.firstChild.nodeValue);
                  result[i][attr.tagName]=attr.firstChild.nodeValue;
               }
            }
         } 
      }
   }
   var content = "<table>";
   content += '<tr class="infotbhd">';
   content += '<td>&nbsp;</td>';
   content += '<td>' + oMessages.name_txt + '</td>';
   content += '<td>' + oMessages.sum_txt + ' </td>';
   content += '</tr>';
   nb_ligne = result.length;
   for(b=0;b<result.length;b++){   
      if(result[b]['SRS'] == result[b]['SRS']){
         content += '<tr id="element'+b+'">';
         content += '<td><img src="images/addcat.png" alt="'+oMessages.add_layer+'" title="'+oMessages.add_layer+'" onClick="addLayerWms(\''+result[b]['Name']+'\',\''+parurl+'\');"></td>';
         content += '<td>'+result[b]['Name']+'</td>';
         content += '<td>'+result[b]['Title']+'</td>';
         content += '</tr>';
      }
   }
   content += '</table>';				 	
   document.getElementById('liste_couche').innerHTML = content;				
   CapaTransfert = null;     
}


opencarto.layerSelect = function(sm, rIdx, r) {
 
   if (opencarto.selection && opencarto.selection.toolbar.disabled && r.get('options.typegeo') != 'RASTER'){
      opencarto.selection.toolbar.enable();
      
   }
   if (opencarto.selection &&  r.get('options.typegeo') == 'RASTER'){
   		opencarto.selection.toolbar.disable();
   		if (opencarto.selection.addFeatureControl){
   			opencarto.selection.addFeatureControl.deactivate();
   		}
   }
   ls = opencarto.map.getLayersByName(r.get('name'));
   // vidange de la sélection
   
   if (opencarto.selection){
   	opencarto.selection.unSelectAll();
   }
   
}


opencarto.resizeMap = function(p){
  
   opencarto.map.updateSize();
  // opencarto.map.panTo(opencarto.map.getCenter());
   
   
}




opencarto.onContextClick = function(grid, rowindex,e){
   if(!opencarto.sm.isSelected(rowindex)){
        opencarto.sm.selectRow(rowindex);
   }
   
   this.menu = new Ext.menu.Menu({
       id:'grid-ctx',
       width: 'auto',
       items: []
   });
   //this.menu.on('hide', this.onContextHide, this);
   
   myRec = grid.store.getAt(rowindex);
   
   myOlLayers = opencarto.map.getLayersByName(myRec.get('name'));
   sldItems = null;
   if(opencarto.sld && opencarto.sld && myRec.get('options.sldFiles') && myRec.get('options.sldFiles').length > 0){
      sldItems = new Array();
      
      for (i=0;i<myRec.get('options.sldFiles').length;i++)
      {
         mySldFile = myRec.get('options.sldFiles')[i];
        
         var myItem = new Ext.menu.CheckItem({
            id:'sld'+i,
            text: mySldFile.name,
            group:'sld',
            layer:myOlLayers[0].name,
            sld:mySldFile.sldurl,
            checked: myOlLayers[0].params.SLD== mySldFile.sldurl?true:false,
            checkHandler: opencarto.onSldChange
         });
         sldItems.push(myItem);
      }
      sldItems.push('<b class="menu-title">'+oMessages.edit+'</b>');
      editItem = new Ext.menu.Item({
            id:'sldEdit',
            text: oMessages.change_rep,
            layer:myOlLayers[0].name,
            sld:myOlLayers[0].params.SLD,
            listeners:{
               click:opencarto.sld.editSLD
            }
            });
      sldItems.push(editItem);
      addItem = new Ext.menu.Item({
            id:'sldAdd',
            text: oMessages.new_rep,
            layer:myOlLayers[0].name,
            listeners:{
               click:opencarto.sld.editSLD
            }
            });
      sldItems.push(addItem);
      if (globalParams.userAdmin){
         delItem = new Ext.menu.Item({
               id:'sldDel',
               text: oMessages.del_rep,
               layer:myOlLayers[0].name,
               sld:myOlLayers[0].params.SLD,
               listeners:{
                  click:opencarto.sld.delSLD
               }
               });
         sldItems.push(delItem);
      }
      
   }
   else if(opencarto.sld && myRec.get('options.typegeo') != 'RASTER'){
      sldItems = new Array();
      addItem = new Ext.menu.Item({
            id:'sldAdd',
            text: oMessages.new_rep,
            layer:myOlLayers[0].name,
            listeners:{
               click:opencarto.sld.editSLD
            }
            });
      sldItems.push(addItem); 
   }
   if (sldItems){
   sldMenu = new Ext.menu.Item({
         text : oMessages.rep_txt,
         menu :{
            width:'auto',
            items:sldItems  
         } 
      })
   }
   if(myRec.get('name') != 'Google Layer'){
      var exportItem1 = new Ext.menu.Item({
           text: oMessages.zoom_layer,
           iconCls: 'zoomToLayer',
           scope:this,
           handler: function(){
               opencarto.zoomToLayer(this.ctxRecord.get('options.layerid'));
           }
      });
      this.menu.add(exportItem1); 
   }
   else{
      var ggItem = new Ext.menu.Item({
        text: oMessages.choice_google,
        menu: {  
            items: [
                {
                    id:'G_SATELLITE_MAP',
                    text: oMessages.sat_google,
                    group: 'gmap',
                    checked: globalParams.googlelayer == G_SATELLITE_MAP?true:false,
                    checkHandler: opencarto.setGoogleStyle
                }, {
                   id:'G_NORMAL_MAP',
                    text: oMessages.map_google,
                    group: 'gmap',
                    checked: globalParams.googlelayer == G_NORMAL_MAP?true:false,
                    checkHandler: opencarto.setGoogleStyle
                }, {
                   id:'G_HYBRID_MAP',
                    text: oMessages.hybrid_google,
                    group: 'gmap',
                    checked: globalParams.googlelayer == G_HYBRID_MAP?true:false,
                    checkHandler: opencarto.setGoogleStyle
                }, {
                   id:'G_PHYSICAL_MAP',
                    text: oMessages.phy_google,
                    group: 'gmap',
                    checked: globalParams.googlelayer == G_PHYSICAL_MAP?true:false,
                    checkHandler: opencarto.setGoogleStyle
                }
            ]
        }
      });
      this.menu.add(ggItem);
   }
   
   if(opencarto.dataview && myRec.get('options.typegeo') != 'RASTER'){
      var exportItem1 = new Ext.menu.Item({
         iconCls: 'openTable',
                  text:oMessages.display_data,
                  scope:this,
                  handler: function(){
                      grid.getSelectionModel().selectRow(rowindex);
                      if (opencarto.selection)
                      	opencarto.selection.unSelectAll();
                      opencarto.datagrid.displayData(this.ctxRecord.get('options.layerid'));
                  }
      });
      this.menu.add(exportItem1); 
   }
   
   if(opencarto.search && opencarto.search.geom != null && myRec.get('options.search') != false){
      var searchItem = new Ext.menu.Item({
         iconCls: 'search',
         text: oMessages.search_txt,
         scope:this,
         handler: function(){
            opencarto.search.showSearchWindow(this.ctxRecord);
         }
      });
      this.menu.add(searchItem); 
   }
   
   
   if(myRec.get('options.exporter') && myRec.get('options.typegeo') != 'RASTER'){
      var exportItem2 = new Ext.menu.Item({
         iconCls: 'exportData',
                  text:oMessages.layer_export,
                  scope:this,
                  handler: function(){
                      grid.getSelectionModel().selectRow(rowindex);
                      opencarto.showExportWindow(this.ctxRecord);
                  }
      });
      this.menu.add(exportItem2);
   }
   if (opencarto.sld && sldItems)
      this.menu.add(sldMenu);
   if(myRec.get('name') != 'Google Layer'){ 
   var mdItem = new Ext.menu.Item({
         text:oMessages.meta_txt,
         scope:this,
         handler: function(){
            opencarto.showMDWindow(this.ctxRecord);
         }
      });
   this.menu.add(mdItem);   
   }
   e.stopEvent();
   if(this.ctxRow){
       Ext.fly(this.ctxRow).removeClass('x-node-ctx');
       this.ctxRow = null;
   }
   this.ctxRow = this.view.getRow(rowindex);
   this.ctxRecord = this.store.getAt(rowindex);
   Ext.fly(this.ctxRow).addClass('x-node-ctx');
   this.menu.showAt(e.getXY());
}
opencarto.setGoogleStyle = function(obj){
   globalParams.googlelayer = eval(obj.id);
   myLayer = opencarto.gisobjects.layers[0];
   myLayer.params.type = globalParams.googlelayer;
   var gl = new OpenLayers.Layer.Google("Google Layer",{	
						type: globalParams.googlelayer,
						"sphericalMercator": true,
						 minZoomLevel: 4, 
						 maxZoomLevel: 8
						});
   var myOldLayer = opencarto.map.getLayersByName('Google Layer');
   opencarto.map.removeLayer(myOldLayer[0],false);
   gl.isBaseLayer = true
   opencarto.map.addLayer(gl);
   opencarto.map.baseLayer.setOpacity( 0.7 );
   
}


function renderURL(value, p, record){
   layerID = opencarto.layerGrid.getSelectionModel().getSelected().get('name');
   if( value.match('http')){
      return String.format(
         '<b><a href="{1}" class="pdflink" target="_blank" title="'+oMessages.clic_to_download+'"><img src="/media/images/export.png" border="0" />&nbsp;&nbsp;{1}</a></b>',layerID,value);
   }else if( value.match('www')){
	   return String.format(
         '<b><a href="http://{1}" class="pdflink" target="_blank" title="'+oMessages.clic_to_download+'"><img src="/media/images/export.png" border="0" />&nbsp;&nbsp;{1}</a></b>',layerID,value);
   }else{
	   return String.format(
         '<b><a href="/media/DOCS/{0}/{1}" class="pdflink" target="_blank" title="'+oMessages.clic_to_download+'"><img src="/media/images/export.png" border="0" />&nbsp;&nbsp;{1}</a></b>',layerID,value);
		 
   }      
}




opencarto.zoomToLayer = function(layerID){

   Ext.Ajax.request({
		url:'../layer/'+layerID+'/extent/?proj=' + globalParams.projection.replace('epsg:',''),
		success:function(res,opt) {
            try{
            eval('geoextent = new OpenLayers.Bounds(' + res.responseText+')');
            opencarto.map.zoomToExtent(geoextent);
            }
            catch(e){
               Ext.Msg.show({
                title: oMessages.error_title,
                msg: oMessages.layer_zoom_failed,
                buttons: Ext.Msg.OK,
                icon: Ext.MessageBox.ERROR
            }); 
            }
        },
         failure: function(res,opt){
		   	Ext.Msg.show({
                title: oMessages.error_title,
                msg: oMessages.layer_zoom_failed,
                buttons: Ext.Msg.OK,
                icon: Ext.MessageBox.ERROR
            });
		   	return;
		}   
	});
   
   
}
opencarto.onGridCollapse = function(p){
   if (opencarto.map)
      opencarto.map.updateSize(); 
}

opencarto.adminHandler = function() {
   
   f = window.open('/opencarto/admin/','admin');
}

opencarto.showExportWindow = function(rec){
   opencarto.projStore = new Ext.data.JsonStore({
      id: 'ps',
      autoLoad:true,
      url: '../../projections/',
      root: 'projs',
      fields: ['name', 'code']
   });

   var form = new Ext.form.FormPanel({
      baseCls: 'x-plain',
      url:'export',
      items: [{
         id:'cbformat',
         hiddenName:'format',
         xtype: 'combo',
         editable: false,
         fieldLabel: oMessages.format,
         displayField: 'name',
         valueField: 'code',
         forceSelection:true,
         labelWidth:150,
         emptyText:oMessages.format_choose,
         store: new Ext.data.Store({
             reader: new Ext.data.ArrayReader(
                 {}, [
                     {name: 'code'},
                     {name: 'name'},
                 ]
             ),
             data: [
                 ['SHP','ESRI Shapefile'],
                 ['TAB','MapInfo TAB'],
                 ['MIF','MapInfo MIF/MID'],
                 ['GML','GML'],
                 ['KML','KML']
             ]
         }),
         mode: 'local'
         },
        {
         id:'cbprojection',
         hiddenName:'projection',
         triggerAction: 'all',
         labelWidth:150,
         xtype: 'combo',
         lazyInit: true,
         editable: false,
         fieldLabel: oMessages.proj_txt,
         displayField: 'name',
         valueField: 'code',
         forceSelection:true,
         emptyText:oMessages.proj_choose,
         store: opencarto.projStore,
         mode:'local'},
         {
            xtype:'fieldset',
            title: oMessages.export_extension,
            autoHeight: true,
            items: [{
                xtype: 'radiogroup',
                fieldLabel: oMessages.ext_choice,
		columns: 1,
                id:'rdextent',
                items: [
                    {boxLabel: oMessages.all_txt, name: 'extent', inputValue: 1, checked: true},
                    {boxLabel: oMessages.window, name: 'extent', inputValue: 2},
                    {boxLabel: oMessages.select_txt, name: 'extent', inputValue: 3}
                   
                ]
            }
         ]
      }
   ]
  });
         
   opencarto.exportWindow = new Ext.Window({
      title: oMessages.data_sig,
      width: 400,
      height:270,
      minWidth: 400,
      minHeight: 270,
      layout: 'fit',
      closeAction :'close',
      plain:true,
      bodyStyle:'padding:5px;',
      buttonAlign:'center',
      items:form,
      buttons: [{
          text: oMessages.download,
          handler : function() {
            vals = form.getForm().getValues(false);
            opencarto.downloadLayer(rec.get('options.layerid'),vals)
          }
      },{
          text: oMessages.cancel,
          handler  : function(){
               opencarto.exportWindow.destroy();
               opencarto.exportWindow = null;
           }

      }]
   });
        opencarto.exportWindow.show();
 
}
opencarto.downloadLayer = function(idLayer,vals){
   if (idLayer && vals.format && vals.projection)
   {
      var myMask = new Ext.LoadMask(opencarto.exportWindow.getEl(), {
          removeMask:true,
            msg:oMessages.prep_data});
            myMask.show();
   }
   extraOption = ''
   if (vals.extent == 2)
      extraOption = '&extent='+opencarto.map.getExtent().toArray().join(',')+'&projExtent='+globalParams.projection;
   else if(vals.extent == 3)
   {
      if (opencarto.datagrid.grid.getSelectionModel().hasSelection() == false)
      {
         Ext.Msg.show({
                title: oMessages.no_export,
                msg: oMessages.no_grid_sel,
                buttons: Ext.Msg.OK,
                icon: Ext.MessageBox.ERROR
            });
         myMask.hide();
         return;
      }
      aIds = new Array();
      rows =opencarto.datagrid.grid.getSelectionModel().getSelections();
      for (i=0;i<rows.length;i++)
      {
         aIds.push(rows[i].get('id'));
      }
      extraOption = '&ids=' + aIds.join(',');
   }
   Ext.Ajax.request({
       timeout:120000,
        url:'../export/?objid=' + idLayer + '&f='+vals.format+'&proj=' +vals.projection+extraOption,
		success:function(res,opt) {
         opencarto.exportWindow.destroy();
         opencarto.exportWindow = null;
         this.location = '../getZipFile/?file='+res.responseText
        },
        failure: function(res,opt){
		   opencarto.exportWindow.destroy()
         opencarto.exportWindow = null;
            Ext.Msg.show({
                title: oMessages.error_title,
                msg: oMessages.no_download_data,
                buttons: Ext.Msg.OK,
                icon: Ext.MessageBox.ERROR
            });
		   	return;
		}
   });
}
opencarto.zoomVector = function(){
   bb = opencarto.getVectorExtent();
   if (bb)
      opencarto.map.zoomToExtent(bb);
   opencarto.datagrid.prepareGeom();
}
opencarto.centerVector = function(){
   bb = opencarto.getVectorExtent();
   if (bb)
   {
      var p = bb.getCenterLonLat();
      opencarto.map.panTo(p);
   }
   
}
opencarto.getVectorExtent = function(){
   var bb = null;
   for (i=0;i<opencarto.vectorLayer.features.length;i++)
   {
      f = opencarto.vectorLayer.features[i];
      if (!bb)
         bb = f.geometry.getBounds();
      else{
         var newBounds = f.geometry.getBounds();
         
         if (newBounds.left < bb.left)
            bb.left = newBounds.left;
         if (newBounds.top > bb.top)
            bb.top = newBounds.top;
         if (newBounds.right > bb.right)
            bb.right = newBounds.right;
         if (newBounds.bottom < bb.bottom)
            bb.bottom = newBounds.bottom;      
      }
      
   }
   return bb;
   
   
}



opencarto.onSldChange = function(item){
    if (item.checked){
      myLayers = opencarto.map.getLayersByName(item.layer);
      myLayers[0].mergeNewParams({sld: item.sld});
      if (opencarto.legend)
      	opencarto.legend.show();
    } 
}

opencarto.ZoomToPosition = function(cb,rec,idx){
   
   x = rec.get('x');
   y = rec.get('y');
   z = rec.get('z');
   if (z != opencarto.map.getZoom()){
      opencarto.map.setCenter(new OpenLayers.LonLat(x,y),z);
   }
   else{
      
      opencarto.map.panTo(new OpenLayers.LonLat(x,y));
   }
   cb.setValue( rec.get('name') );
}

opencarto.addPosition = function(){
   Ext.MessageBox.prompt(oMessages.loc_new, oMessages.loc_name + ' :', opencarto.savePosition);
   
}
opencarto.savePosition = function(btn,name){
   if (btn == 'ok' && name != ''){
      xy = opencarto.map.getCenter();
      z = opencarto.map.getZoom();
      x = xy.lon;
      y = xy.lat;
      Ext.Ajax.request({
         url:'addposition/',
         params: { 
             name: name,
             x:x,
             y:y,
             z:z
         },
        method: 'GET',
         success:function(res,opt) {
            if (res.responseText == '1'){
               Ext.MessageBox.alert(oMessages.success, oMessages.loc_add_ok);
               opencarto.position.positionStore.reload();
            }
            else
               Ext.MessageBox.alert(oMessages.error_title, oMessages.loc_add_no);
         },
         failure:function(res,opt){
            Ext.MessageBox.alert(oMessages.error_title, oMessages.loc_add_no);
            
         }
      });
   }
   else if(btn=='ok' && name == '')
       Ext.MessageBox.alert(oMessages.error_title, oMessages.loc_no_name, opencarto.addPosition);

   
}

opencarto.getLayerType = function(layerName){
   
   for (i=0;i<opencarto.gisobjects.layers.length;i++)
   {
      myLayer = opencarto.gisobjects.layers[i];
      
      if (myLayer.name == layerName)
         return myLayer.options.typegeo;
      
   }
   return null;
   
   
}
opencarto.getLayerId = function(layerName){
   
   for (i=0;i<opencarto.gisobjects.layers.length;i++)
   {
      myLayer = opencarto.gisobjects.layers[i];
      
      if (myLayer.name == layerName)
         return myLayer.options.layerid;
      
   }
   return null; 
}
opencarto.getLayerName = function(layerId){
   
   for (i=0;i<opencarto.gisobjects.layers.length;i++)
   {
      myLayer = opencarto.gisobjects.layers[i];
      
      if (myLayer.options.layerid == layerId)
         return myLayer.name;
      
   }
   return null; 
}

opencarto.getLayerLabel = function(layerId){
   
   for (i=0;i<opencarto.gisobjects.layers.length;i++)
   {
      myLayer = opencarto.gisobjects.layers[i];
      
      if (myLayer.options.layerid == layerId)
         return myLayer.label;
      
   }
   return null; 
}



opencarto.showMDWindow = function(rec){
   
   opencarto.MDWindow = new Ext.Window({
      title: oMessages.meta_txt,
      width: 400,
      height:220,
      minWidth: 400,
      minHeight: 220,
      layout: 'fit',
      closeAction :'close',
      plain:true,
      bodyStyle:'padding:5px;',
      buttonAlign:'center',
      buttons: [{
          text: 'Fermer',
          handler  : function(){
               opencarto.MDWindow.destroy();
               opencarto.MDWindow = null;
           }

      }]
   });
   opencarto.MDWindow.show();
   
   layer_id = rec.get('options.layerid');
   opencarto.MDtpl = new Ext.Template(
   '<p><b>'+oMessages.format+' :</b> {format}</p>',
   '<p><b>'+oMessages.type+' :</b> {type}</p>',
   '<p><b>'+oMessages.proj+' :</b> {projection}</p>',
   '<p><b>'+oMessages.desc+' :</b> {description}</p>',
   '<p><b>'+oMessages.author+' :</b> {auteur}</p>',
   '<p><b>'+oMessages.source_txt+' :</b> {source}</p>',
   '<p><b>'+oMessages.update_date+' :</b> {dmaj}</p>',
   '<p><b>'+oMessages.scale+' :</b> {echelle}</p>',
   '<p><b>'+oMessages.accuracy+' :</b> {precision}</p>'
   
   );
   Ext.Ajax.request({
        url: '../metadata/',
        method: 'GET',
        params: {
            layer_id: layer_id 
        },
        success: function(res,opt) {
		   	// affectation de la réponse à un objet global
            try {
                eval('var response = ' + res.responseText);
            } catch(e) {
               
            }
            
           
            if (response) {
               opencarto.MDtpl.overwrite(opencarto.MDWindow.body, response);
               opencarto.MDWindow.body.highlight('#c3daf9', {block:true});
            }
        },
        failure: function(res,opt){
          Ext.MessageBox.alert(oMessages.error_title, oMessages.no_download_data);
         
         
        }
   });  
}

