var layers = {};
var controls = [];
var polyControl;
var evtLoadEnd;
var scalebar;

function init() {
  map = new OpenLayers.Map ("map", {
    controls:[
      new OpenLayers.Control.Navigation(),
      new OpenLayers.Control.LoadingPanel(),
      new OpenLayers.Control.NetworkSwitcher({'div':document.getElementById('switcher')}),
      new OpenLayers.Control.Attribution()],
    maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
    maxResolution: 156543.0399,
    numZoomLevels: 19,
    units: "m",
    projection: new OpenLayers.Projection("EPSG:900913"),
    displayProjection: new OpenLayers.Projection("EPSG:4326")
  });
  
  scalebar = new OpenLayers.Control.ScaleBar({
                div: document.getElementById("scalebar"),
                minWidth: 75,
                maxWidth: 175
            });
            map.addControl(scalebar);


  //****************************
  // Base layers
  //****************************

  // Define the map layer
  layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik",{opacity:0.5});
  map.addLayer(layerMapnik);
  layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender",{opacity:0.5});
  map.addLayer(layerTilesAtHome);

  var RailLine = new OpenLayers.Layer.GML("Train Lines",
      //"gml/rail.php?location="+params.location, {
      //"export/"+params.location+"/export_rail.gml", {
      //"data/"+params.location+"/trains.json", {
      "data/_none_/trains.json", {
         //format: OpenLayers.Format.GML,
         format: OpenLayers.Format.GeoJSON,
         projection: map.displayProjection,
         styleMap: getLineStyles("subway"),
         visibility: false,
         eventListeners: {
           beforefeaturesadded: function(evt) {
             var features = evt.features;
             features.sort(function(a,b) {
                        aRef = String(a.ref);
                        bRef = String(b.ref);
                        if (!isNaN(aRef) && !isNaN(bRef))
                          return Number(bRef)-Number(aRef);
                        var i=0;
                        while (i<aRef.length && aRef[i]==bRef[i]) {
                          i++
                        }
                        if (i == aRef.length)
                          return 1;
                        if (aRef[i]<bRef[i])
                          return 1;
                        else if (aRef[i]>bRef[i])
                          return -1;
                        else
                          return 0;
                        });
             evt.features = features;
           },
           loadend:function(evt) {
             var features = evt.object.features;
             var network = {closed:true,relations:{}};
             for (var i=0; i<features.length; i++) {
               var feat = features[i];
               //feat.attributes['type'] = 'Train';
               var ref = feat.attributes.ref;
               if (ref in network.relations)
                 network.relations[ref].features.push(feat);
               else
                 network.relations[ref] = {checked:false,features:[feat]};
             }
             if (features.length > 0)
               evt.object['network'] = network;
             else
               evt.object.displayInLayerSwitcher = false;
             evt.object.setVisibility(false);
             //evt.object.setVisibility(true);
           }
         }
       });
  map.addLayer(RailLine);
  layers['RailLine'] = RailLine;

  //*************************
  // Metro
  //*************************
  // Add the subway GML layer
  var SubwayLine = new OpenLayers.Layer.GML("Subway Lines",
      //"export/"+params.location+"/export_subway.gml", {
      //"data/"+params.location+"/subways.json", {
      "data/_none_/subways.json", {
         //format: OpenLayers.Format.GML,
         format: OpenLayers.Format.GeoJSON,
         projection: map.displayProjection,
         styleMap: getLineStyles("subway"),
         visibility: true,
         eventListeners: {
           loadend:function(evt) {
             var features = evt.object.features;
             var network = {closed:true,relations:{}};
             for (var i=0; i<features.length; i++) {
               var feat = features[i];
               //feat.attributes['type'] = 'Subway';
               var ref = feat.attributes.ref;
               if (ref in network.relations)
                 network.relations[ref].features.push(feat);
               else
                 network.relations[ref] = {checked:true,features:[feat]};
             }
             if (features.length > 0)
               evt.object['network'] = network;
             else
               evt.object.displayInLayerSwitcher = false;
             evt.object.setVisibility(false);
             evt.object.setVisibility(true);
           }
         }
       });
  map.addLayer(SubwayLine);
  layers['SubwayLine'] = SubwayLine;

  // Add the subway stop GML layer
  var myStyles = new OpenLayers.StyleMap({
    "default": new OpenLayers.Style({
       externalGraphic: 'icons/subway.png',
       pointRadius: 9
    }),
    "select": new OpenLayers.Style({
       externalGraphic: 'icons/subway-hover.png',
       pointRadius: 13
    })
  });
  var SubwayStop = new OpenLayers.Layer.GML("Stations",
      //"export/"+params.location+"/export_subway_stop.gml", {
      //"data/"+params.location+"/stations.json", {
      "data/_none_/stations.json", {
         //format: OpenLayers.Format.GML,
         format: OpenLayers.Format.GeoJSON,
         projection: map.displayProjection,
         styleMap: myStyles,
         visibility: false,
         eventListeners: {
           loadend:function(evt) {
             var features = evt.object.features;
             if (features.length == 0)
               evt.object.displayInLayerSwitcher = false;
             evt.object.setVisibility(true);
             evt.object.setVisibility(false);
           }
         }
       });
  map.addLayer(SubwayStop);
  layers['SubwayStop'] = SubwayStop;
 
  //*************************
  //Tram
  //*************************			
  // Add the tramway GML layer
  //tramway from highway
  var myStyles = new OpenLayers.StyleMap({
      "default": new OpenLayers.Style({
         strokeColor:"black",
         strokeWidth: 5,
         strokeOpacity: 1,
         strokeDashstyle: "solid"
      })
  });
  var TramwayLineH = new OpenLayers.Layer.GML("Tram railways",
      //"export/"+params.location+"/export_tramway.gml", {
      //"data/"+params.location+"/tramways.json", {
      "data/_none_/tramways.json", {
         //format: OpenLayers.Format.GML,
         format: OpenLayers.Format.GeoJSON,
         projection: map.displayProjection,
         styleMap: myStyles,
         visibility: false,
         eventListeners: {
           loadend:function(evt) {
             var features = evt.object.features;
             if (features.length == 0)
               evt.object.displayInLayerSwitcher = false;
             evt.object.setVisibility(true);
             evt.object.setVisibility(false);
           }
         }
      });
  map.addLayer(TramwayLineH);
  layers['TramwayLineH'] = TramwayLineH;
  
  // tramway from route
  var TramwayLineR = new OpenLayers.Layer.GML("Tramway lines",
      //"export/"+params.location+"/export_tramway_route.gml", {
      //"data/"+params.location+"/trams.json", {
      "data/_none_/trams.json", {
         //format: OpenLayers.Format.GML,
         format: OpenLayers.Format.GeoJSON,
         projection: map.displayProjection,
         styleMap: getLineStyles("tramway"),
         visibility: true,
         eventListeners: {
           loadend:function(evt) {
             var features = evt.object.features;
             var network = {closed:true,relations:{}};
             evt.object['network'] = network;
             for (var i=0; i<features.length; i++) {
               var feat = features[i];
               //feat.attributes['type'] = 'Tramway';
               var ref = feat.attributes.ref;
               if (ref in network.relations)
                 network.relations[ref].features.push(feat);
               else
                 network.relations[ref] = {checked:true,features:[feat]};
             }
             if (features.length > 0)
               evt.object['network'] = network;
             else
               evt.object.displayInLayerSwitcher = false;
             evt.object.setVisibility(false);
             evt.object.setVisibility(true);
           }
         }
      });
  map.addLayer(TramwayLineR);
  layers['TramwayLineR'] = TramwayLineR;

  // Add the tramway stop GML layer
  var myStyles = new OpenLayers.StyleMap({
    "default": new OpenLayers.Style({
       externalGraphic: 'icons/tram.png',
       pointRadius: 9
    }),
    "select": new OpenLayers.Style({
       externalGraphic: 'icons/tram-hover.png',
       pointRadius: 13
    })
  });
  var TramwayStop = new OpenLayers.Layer.GML("Tram stops",
      //"export/"+params.location+"/export_tramway_stop.gml", {
      //"data/"+params.location+"/tram_stops.json", {
      "data/_none_/tram_stops.json", {
         //format: OpenLayers.Format.GML,
         format: OpenLayers.Format.GeoJSON,
         projection: map.displayProjection,
         styleMap: myStyles,
         visibility: false,
         eventListeners: {
           loadend:function(evt) {
             var features = evt.object.features;
             if (features.length == 0)
               evt.object.displayInLayerSwitcher = false;
             evt.object.setVisibility(true);
             evt.object.setVisibility(false);
           }
         }
      });
  map.addLayer(TramwayStop);
  layers['TramwayStop'] = TramwayStop;
  
  //*************************
  // Bus
  //*************************
  // Add the buses GML layer
  var BusLine = new OpenLayers.Layer.GML("Bus lines",
      //"export/"+params.location+"/export_bus.gml", {
      //"data/"+params.location+"/buses.json", {
      "data/_none_/buses.json", {
         //format: OpenLayers.Format.GML,
         format: OpenLayers.Format.GeoJSON,
         projection: map.displayProjection,
         styleMap: getLineStyles("bus"),
         visibility: true,
         eventListeners: {
           loadend:function(evt) {
             var features = evt.object.features;
             var network = {closed:true,relations:{}};
             for (var i=0; i<features.length; i++) {
               var feat = features[i];
               //feat.attributes['type'] = 'Bus';
               var ref = feat.attributes.ref;
               if (ref in network.relations)
                 network.relations[ref].features.push(feat);
               else
                 network.relations[ref] = {checked:true,features:[feat]};
             }
             if (features.length > 0)
               evt.object['network'] = network;
             else
               evt.object.displayInLayerSwitcher = false;
             evt.object.setVisibility(false);
             evt.object.setVisibility(true);
           }
         }
      });
  map.addLayer(BusLine);
  layers['BusLine'] = BusLine;

  // Add the bus stop GML layer
  var myStyles = new OpenLayers.StyleMap({
    "default": new OpenLayers.Style({
       externalGraphic: 'icons/bus.png',
       pointRadius: 9
    }),
    "select": new OpenLayers.Style({
       externalGraphic: 'icons/bus-hover.png',
       pointRadius: 13
    })
  });
  var BusStop = new OpenLayers.Layer.GML("Bus stops",
      //"export/"+params.location+"/export_bus_stop.gml", {
      //"data/"+params.location+"/bus_stops.gml", {
      "data/_none_/bus_stops.gml", {
        //format: OpenLayers.Format.GML,
        format: OpenLayers.Format.GeoJSON,
         projection: map.displayProjection,
         styleMap: myStyles,
        visibility: false,
         eventListeners: {
           loadend:function(evt) {
             var features = evt.object.features;
             if (features.length == 0)
               evt.object.displayInLayerSwitcher = false;
             evt.object.setVisibility(true);
             evt.object.setVisibility(false);
           }
         }
      });
  map.addLayer(BusStop);
  layers['BusStop'] = BusStop;

  // Add the bicylce rental GML layer
  var myStyles = new OpenLayers.StyleMap({
    "default": new OpenLayers.Style({
       externalGraphic: 'icons/bicycle.png',
       pointRadius: 9
    }),
    "select": new OpenLayers.Style({
       externalGraphic: 'icons/bicycle-hover.png',
       pointRadius: 13
    })
  });
  var Bicycle = new OpenLayers.Layer.GML("Bicycle rentals",
      //"export/"+params.location+"/export_bicycle_rental.gml", {
      //"data/"+params.location+"/bicycles.json", {
      "data/_none_/bicycles.json", {
        //format: OpenLayers.Format.GML,
        format: OpenLayers.Format.GeoJSON,
         projection: map.displayProjection,
         styleMap: myStyles,
        visibility: false,
         eventListeners: {
           loadend:function(evt) {
             var features = evt.object.features;
             if (features.length == 0)
               evt.object.displayInLayerSwitcher = false;
             evt.object.setVisibility(true);
             evt.object.setVisibility(false);
           }
         }
      });
  map.addLayer(Bicycle);
  layers['Bicycle'] = Bicycle;

  //**************************
  // Draw a rectangle to be saved as a location in postgis
  //**************************
  var polygonLayer = new OpenLayers.Layer.Vector("Drawing layer",{displayInLayerSwitcher:false});
  map.addLayer(polygonLayer);
  //layers.push(polygonLayer);
  polyOptions = {sides: 4, irregular: true};
  //var polyControl;
  polyControl = new OpenLayers.Control.DrawFeature(polygonLayer,
      OpenLayers.Handler.RegularPolygon,
      {handlerOptions: polyOptions,
      "featureAdded": setPolygonLocation});
  map.addControl(polyControl);
  controls.push(polyControl);

  //*************************
  //Add the layer location
  //*************************			
  // Add the location GML layer
  var myStyles = new OpenLayers.StyleMap({
			"default": new OpenLayers.Style({
				fillOpacity: 0.1,
				fillColor: "blue",
				strokeColor: "red",
				strokeWidth: 1,
				strokeOpacity: 1
				})
			});
  /*
  var locationLayer = new OpenLayers.Layer.GML("Locations",
      "export/export_location.gml", {
          format: OpenLayers.Format.GML,
          styleMap: myStyles,
          visibility: false
      });
  map.addLayer(locationLayer);
  //layers.push(locationLayer);
  */

  //add select controls and activate them
  var controlSelect = new OpenLayers.Control.SelectFeature(
      /*
      [RailLine,
       SubwayLine,
       SubwayStop,
       BusLine,
       BusStop,
       TramwayLineR,
       TramwayStop,
       Bicycle], {
       */
      [RailLine,
       SubwayLine,
       SubwayStop,
       TramwayLineR,
       TramwayStop,
       BusLine,
       BusStop,
       Bicycle], {
        onSelect: onFeatureSelect,
        onUnselect: onFeatureUnselect
      });
  map.addControl(controlSelect);
  controlSelect.activate();
  controls.push(controlSelect);


  //*************************	
  //position and zoom
  //*************************	
  // Start position for the map
  /*
  mycenter = new OpenLayers.Geometry.Point(params.lon, params.lat) ;
  var zoom = params.zoom;
  var LonLat = new OpenLayers.LonLat(mycenter.x, mycenter.y) ;
  map.setCenter (LonLat, zoom);
  */

  map.addControl(new OpenLayers.Control.MousePosition());
  map.zoomToMaxExtent = function() {
    if (!params)
      return this.zoomToExtent(this.maxExtent);

    //*************************	
    //position and zoom
    //*************************	
    // Start position for the map
    mycenter = new OpenLayers.Geometry.Point(params.lon, params.lat) ;
    if (params.bbox == null) {
      var zoom = params.zoom;
      var LonLat = new OpenLayers.LonLat(mycenter.x, mycenter.y) ;
      map.setCenter(LonLat, zoom);
    } else {
      var bbox = params.bbox;
      bbox = new OpenLayers.Bounds(bbox[0],bbox[1],bbox[2],bbox[3]);
      bbox = bbox.toGeometry();
      bbox.transform(map.displayProjection,map.projection);
      bbox= bbox.getBounds();
      map.zoomToExtent(bbox,true);
    }
  };
  window.setTimeout(function() {getLocationStatus();},2000);
}

function getLocationStatus() {
  $.getJSON('location_status.php',
    {country:params.country,location:params.location},
    function(data) {
      if (data.location != params.location)
        return false;

      $('#permalink').attr('href','http://3liz.fr/public/osmtransport/index.php?country='+params.co_name+'&location='+params.name);
      $('#location-info-title').html('Updating '+params.name+' data');
      return setLayers();
    });
  return false;
  $.getJSON('location_status.php',{'location':params.location},function(aData) {
      if (aData.name != params.location)
        return false;

      $('#permalink').attr('href','http://3liz.fr/public/osmtransport/index.php?country='+params.co_name+'&location='+params.name);
      $('#location-info-title').html('Updating '+params.location+' data');
      if (!aData.update)
        return setLayers();

      $('#location-info').show();
      if (layers['RailLine'].url != "data/_none_/trains.json")
        layers['RailLine'].setUrl("data/_none_/trains.json");
      if (layers['SubwayLine'].url != "data/_none_/subways.json")
        layers['SubwayLine'].setUrl("data/_none_/subways.json");
      if (layers['SubwayStop'].url != "data/_none_/stations.json")
        layers['SubwayStop'].setUrl("data/_none_/stations.json");
      if (layers['TramwayLineH'].url != "data/_none_/tramways.json")
        layers['TramwayLineH'].setUrl("data/_none_/tramways.json");
      if (layers['TramwayLineR'].url != "data/_none_/trams.json")
        layers['TramwayLineR'].setUrl("data/_none_/trams.json");
      if (layers['TramwayStop'].url != "data/_none_/tram_stops.json")
        layers['TramwayStop'].setUrl("data/_none_/tram_stops.json");
      if (layers['BusLine'].url != "data/_none_/buses.json")
        layers['BusLine'].setUrl("data/_none_/buses.json");
      if (layers['BusStop'].url != "data/_none_/bus_stops.json")
        layers['BusStop'].setUrl("data/_none_/bus_stops.json");
      if (layers['Bicycle'].url != "data/_none_/bicycles.json")
        layers['Bicycle'].setUrl("data/_none_/bicycles.json");
      map.zoomToMaxExtent();
      window.setTimeout(function() {getLocationStatus();},30000);
  });
}

function setLayers() {

  $('#location-info').hide();

  if (layers['RailLine'].url != "data/"+params.location+"/trains.json") {
    //layers['RailLine'].setUrl("data/"+params.location+"/trains.json");
    layers['RailLine'].setUrl("getLayer?location="+params.location+"&type=trains");
    layers['RailLine'].network = {closed:true,relations:{}};
    layers['RailLine'].displayInLayerSwitcher = true;
  }
  if (layers['SubwayLine'].url != "data/"+params.location+"/subways.json") {
    //layers['SubwayLine'].setUrl("data/"+params.location+"/subways.json");
    layers['SubwayLine'].setUrl("getLayer?location="+params.location+"&type=subways");
    layers['SubwayLine'].network = {closed:true,relations:{}};
    layers['SubwayLine'].displayInLayerSwitcher = true;
  }
  if (layers['SubwayStop'].url != "data/"+params.location+"/stations.json") {
    //layers['SubwayStop'].setUrl("data/"+params.location+"/stations.json");
    layers['SubwayStop'].setUrl("getLayer?location="+params.location+"&type=stations");
    layers['SubwayStop'].displayInLayerSwitcher = true;
  }
  if (layers['TramwayLineH'].url != "data/"+params.location+"/tramways.json") {
    //layers['TramwayLineH'].setUrl("data/"+params.location+"/tramways.json");
    layers['TramwayLineH'].setUrl("getLayer?location="+params.location+"&type=tramways");
    layers['TramwayLineH'].displayInLayerSwitcher = true;
  }
  if (layers['TramwayLineR'].url != "data/"+params.location+"/trams.json") {
    //layers['TramwayLineR'].setUrl("data/"+params.location+"/trams.json");
    layers['TramwayLineR'].setUrl("getLayer?location="+params.location+"&type=trams");
    layers['TramwayLineR'].network = {closed:true,relations:{}};
    layers['TramwayLineR'].displayInLayerSwitcher = true;
  }
  if (layers['TramwayStop'].url != "data/"+params.location+"/tram_stops.json") {
    //layers['TramwayStop'].setUrl("data/"+params.location+"/tram_stops.json");
    layers['TramwayStop'].setUrl("getLayer?location="+params.location+"&type=tram_stops");
    layers['TramwayStop'].displayInLayerSwitcher = true;
  }
  if (layers['BusLine'].url != "data/"+params.location+"/buses.json") {
    //layers['BusLine'].setUrl("data/"+params.location+"/buses.json");
    layers['BusLine'].setUrl("getLayer?location="+params.location+"&type=buses");
    layers['BusLine'].network = {closed:true,relations:{}};
    layers['BusLine'].displayInLayerSwitcher = true;
  }
  if (layers['BusStop'].url != "data/"+params.location+"/bus_stops.json") {
    //layers['BusStop'].setUrl("data/"+params.location+"/bus_stops.json");
    layers['BusStop'].setUrl("getLayer?location="+params.location+"&type=bus_stops");
    layers['BusStop'].displayInLayerSwitcher = true;
  }
  if (layers['Bicycle'].url != "data/"+params.location+"/bicycles.json") {
    //layers['Bicycle'].setUrl("data/"+params.location+"/bicycles.json");
    layers['Bicycle'].setUrl("getLayer?location="+params.location+"&type=bicycles");
    layers['Bicycle'].displayInLayerSwitcher = true;
  }

  /*
  //*************************	
  //position and zoom
  //*************************	
  // Start position for the map
  mycenter = new OpenLayers.Geometry.Point(params.lon, params.lat) ;
  if (params.bbox == null) {
    var zoom = params.zoom;
    var LonLat = new OpenLayers.LonLat(mycenter.x, mycenter.y) ;
    map.setCenter(LonLat, zoom);
  } else {
    var bbox = params.bbox;
    bbox = new OpenLayers.Bounds(bbox[0],bbox[1],bbox[2],bbox[3]);
    map.zoomToExtent(bbox,true);
  }
  */
  map.zoomToMaxExtent();
}

function getLineStyles(aType) {
  var theContext = {
      getColor:function(feature){
        var color = 'black';
        if (feature.attributes.colour)
          color = feature.attributes.colour;
        if (feature.attributes.color)
          color = feature.attributes.color;
        if (color.length == 6 && color != 'yellow' && color != 'orange')
          return '#'+color;
        return color;
      },
      getDisplay:function(feature){
        if (!feature.layer.network)
          return "";
        else if(!feature.layer.network.relations[feature.attributes.ref])
          return "";
        else if(feature.layer.network.relations[feature.attributes.ref].checked)
          return "";
        else
          return "none";
      }
    };
  var theStrokeWidth = 7;
  switch(aType) {
    case 'subway':
      theStrokeWidth = 5;
      break;
    case 'tramway':
      theStrokeWidth = 5;
      break;
    case 'bus':
      theStrokeWidth = 3;
      break;
  }
  var defaultStyle = new OpenLayers.Style({
         strokeColor:"${getColor}",
         strokeWidth: theStrokeWidth,
         strokeOpacity: 1,
         strokeDashstyle: "solid",
         display:"${getDisplay}"
      }, {context:theContext});
  return new OpenLayers.StyleMap({
      "default":defaultStyle,
      "select":defaultStyle
      });
}

function resizeContent() {
  var content = $("#content");

  //alert(document.documentElement.clientWidth+'\n'+$("#left").width()+'\n'+$("#left").offset().left);
  content.width(document.documentElement.clientWidth - $("#left").width() - $("#left").offset().left);
  //alert(document.documentElement.clientWidth+" - "+$("#left").width()+" - "+$("#left").offset().left);
  //content.height(document.documentElement.clientHeight - 50);
} 

function resizeMap() {
  if (map) {
    var centre = map.getCenter();
    var zoom = map.getZoom();
  }

  $("#switcher").height("0px");
  $("#map").height(($("#fix-height").height()) + "px");
  $("#left").height(($("#fix-height").height()) + "px");
  resizeContent();
  $("#map").width(($("#content").width() - 2) + "px");
  $("#map").height(($("#content").height() - 2) + "px");
  $("#left").height(($("#content").height() - 2) + "px");
  $("#switcher").height(($("#content").height()-$("#fix-height").height()-10) + "px");

  if (map)
    map.setCenter(centre, zoom);
} 

function handleResize() {
  if (brokenContentSize) {
    resizeContent();
  }
  resizeMap();
}

$(document).ready(function() {
    $.get('country_list.php',
      {country:params.country},
      function(data) {
        $("#country_select").html(data);
        //$("#country_select").html('<option>France</option>');
      },
      'html');
    $.get('location_list.php',
      {country:params.country,location:params.location},
      function(data) {
        $("#location_select").html(data);
        //$("#location_select").html('<option>Paris</option>');
        window.setTimeout(function() {
        resizeContent();
        handleResize();
        init();
        },1000);
        window.onload = handleResize;
        window.onresize = handleResize;
      },
      'html');
    $("#country_select").change(function() {
        var val = $(this.options[this.selectedIndex]).attr('value');
        $.get('location_list.php',
           {country:val},
           function(data) {
             $("#location_select").html(data).change();
             resizeContent();
             handleResize();
           },
           'html');
        });
    $("#location_select").change(function() {
          var val = $(this.options[this.selectedIndex]).val();
          var country = $("#country_select")[0];
          country = $(country.options[country.selectedIndex]).attr('value');
          if (val != params.location) {
            $.get('location_status.php',
              {country:country,location:val},
              function(data) {
                params = data;

      $('#permalink').attr('href','http://3liz.fr/public/osmtransport/index.php?country='+params.co_name+'&location='+params.name);
      $('#location-info-title').html('Updating '+params.name+' data');
      return setLayers();
              },
              'json');
          }
       });
});

//methods for select control
//cross to close
function onPopupClose(evt) {
  map.removePopup(selectedFeature.popup);
  selectedFeature.popup.destroy();
  selectedFeature.popup = null;
}
function onFeatureSelect(feature) {
  selectedFeature = feature;
  var html = '<div>';
  if (feature.geometry.CLASS_NAME == 'OpenLayers.Geometry.LineString' ||
      feature.geometry.CLASS_NAME == 'OpenLayers.Geometry.MultiLineString') {
    var color = 'black';
    if (feature.attributes.color)
      color = feature.attributes.color;
    else if (feature.attributes.colour)
      color = feature.attributes.colour;
    html += '<table>';
    html += '<tr><td>';
    html += '<h4 style="color:black;margin:0;">'+feature.attributes.route+'</h4>';
    html += '</td><td style="text-align:right; background-color:'+color+'; color:white; font-weight:bold; text-align:center; border: black solid 1px;">&nbsp;';
    html += feature.attributes.ref;
    html += '&nbsp;</td></tr>';
    html += '</table>';
    html += '<table>';
    if (feature.attributes.name && feature.attributes.name != "") {
      html += '<tr><td>';
      html += 'Name&nbsp;:&nbsp;';
      html += '</td><td>';
      html += feature.attributes.name;
      html += '</td></tr>';
    }
    html += '<tr><td>';
    html += 'Operator&nbsp;:&nbsp;';
    html += '</td><td>';
    html += feature.attributes.operator;
    html += '</td></tr>';
    if (feature.attributes.network && feature.attributes.network != "") {
      html += '<tr><td>';
      html += 'Network&nbsp;:&nbsp;';
      html += '</td><td>';
      html += feature.attributes.network;
      html += '</td></tr>';
    }
    html += '<tr><td>';
    html += 'Wheel&nbsp;chair&nbsp;:&nbsp;';
    html += '</td><td>';
    html += feature.attributes.wheelchair
    html += '</td></tr>';
    if (feature.attributes.url && feature.attributes.url != "") {
      html += '<tr><td>';
      html += '<a href="'+feature.attributes.url+'" target="_blank">Link</a>';
      html += '</td><td>';
      html += '</td></tr>';
    }
    html += '</table>';
  } else {
    html += '<h4 style="color:#333333;padding:7px;margin:0;">'+feature.attributes.name+'</h4>';
    if (feature.attributes.network && feature.attributes.network != "")
      html += '<p style="padding-left:5px;">Network: '+feature.attributes.network+'</p>';
    if (feature.attributes.lines_prop) {
      html += '<p style="padding-left:5px;">Lines:';
      for (var l in feature.attributes.lines_prop) {
        var line = feature.attributes.lines_prop[l];
        var color = 'black';
        if (line.color)
          color = line.color;
        else if (line.colour)
          color = line.colour;
        html += '&nbsp;<span style="vertical-align:20%; color:white; border:black solid 1px;background-color:'+color+';">&nbsp;'+line.ref+'&nbsp;</span>';
      }
      html += '</p>';
    }
  }
  html += '</div>';
  popup = new OpenLayers.Popup.FramedCloud("chicken", 
      map.getLonLatFromPixel(controls[1].handlers.feature.evt.xy),
     // feature.geometry.getBounds().getCenterLonLat(),
      null,
      html,
      //"<div>Station : " + feature.attributes.name+"</br>Opérateur : " + feature.attributes.operator+"</div>",
      null, true, onPopupClose);
  feature.popup = popup;
  map.addPopup(popup); 
}
function onFeatureUnselect(feature) {
  if (feature.popup == null)
    return false;
  map.removePopup(feature.popup);
  feature.popup.destroy();
  feature.popup = null;
}    

function setPolygonLocation(obj){
  //drawn rectangle
  //polygonLayer.destroyFeatures(); //ne marche pas !!
  var myrect = obj.geometry;
  //alert("truc");
  if (myrect.getArea() < 4790153222)
  {var myrectString = myrect.toString();
    document.getElementById("myrectangle").value=myrectString;
    document.getElementById("lon").value= obj.geometry.getBounds().getCenterLonLat().lon;
    document.getElementById("lat").value= obj.geometry.getBounds().getCenterLonLat().lat;
    document.getElementById("zoom").value= map.getZoom();
  }
  else {
    alert("The area is too big. Please draw a rectangle with an area smaller than 5000000000.\nYour rectangle area is : "+myrect.getArea());
    obj.destroy();
  }
  polyControl.deactivate();
}

function drawNewLocation() {
  polyControl.layer.removeFeatures(polyControl.layer.features);
  polyControl.activate();
}

function toggleNewLocation(evt) {
  $("#new_location").toggle();
  resizeContent();
  handleResize();
  //map.updateSize();
  return false;
}

function toggleGroupLayers(aGrp) {
  var layer = layers['RailLine'];
  for (var ref in layer.network.relations) {
    layer.network.relations[ref].checked = false;
  }
  layers['RailLine'].setVisibility(false);
  var layer = layers['SubwayLine'];
  for (var ref in layer.network.relations) {
    layer.network.relations[ref].checked = false;
  }
  layers['SubwayLine'].setVisibility(false);
  layers['SubwayStop'].setVisibility(false);
  layers['TramwayLineH'].setVisibility(false);
  var layer = layers['TramwayLineR'];
  for (var ref in layer.network.relations) {
    layer.network.relations[ref].checked = false;
  }
  layers['TramwayLineR'].setVisibility(false);
  layers['TramwayStop'].setVisibility(false);
  var layer = layers['BusLine'];
  for (var ref in layer.network.relations) {
    layer.network.relations[ref].checked = false;
  }
  layers['BusLine'].setVisibility(false);
  layers['BusStop'].setVisibility(false);
  layers['Bicycle'].setVisibility(false);
  switch(aGrp) {
    case 'trains':
      layer = layers['RailLine'];
      for (var ref in layer.network.relations) {
        layer.network.relations[ref].checked = true;
      }
      layers['RailLine'].setVisibility(true);
      break;
    case 'subways':
      layer = layers['SubwayLine'];
      for (var ref in layer.network.relations) {
        layer.network.relations[ref].checked = true;
      }
      layers['SubwayLine'].setVisibility(true);
      layers['SubwayStop'].setVisibility(true);
      break;
    case 'tramways':
      layers['TramwayLineH'].setVisibility(true);
      layer = layers['TramwayLineR'];
      for (var ref in layer.network.relations) {
        layer.network.relations[ref].checked = true;
      }
      layers['TramwayLineR'].setVisibility(true);
      layers['TramwayStop'].setVisibility(true);
      break;
    case 'buses':
      layer = layers['BusLine'];
      for (var ref in layer.network.relations) {
        layer.network.relations[ref].checked = true;
      }
      layers['BusLine'].setVisibility(true);
      layers['BusStop'].setVisibility(true);
      break;
    case 'bikes':
      layers['Bicycle'].setVisibility(true);
      break;
  }
  return false;
}

