More trip planner testing with colors
[busui.git] / labs / openlayers / lib / OpenLayers / Control / ArgParser.js
blob:a/labs/openlayers/lib/OpenLayers/Control/ArgParser.js -> blob:b/labs/openlayers/lib/OpenLayers/Control/ArgParser.js
  /* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for
  * full list of contributors). Published under the Clear BSD license.
  * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
  * full text of the license. */
   
   
  /**
  * @requires OpenLayers/Control.js
  */
   
  /**
  * Class: OpenLayers.Control.ArgParser
  * The ArgParser control adds location bar querystring parsing functionality
  * to an OpenLayers Map.
  * When added to a Map control, on a page load/refresh, the Map will
  * automatically take the href string and parse it for lon, lat, zoom, and
  * layers information.
  *
  * Inherits from:
  * - <OpenLayers.Control>
  */
  OpenLayers.Control.ArgParser = OpenLayers.Class(OpenLayers.Control, {
   
  /**
  * Parameter: center
  * {<OpenLayers.LonLat>}
  */
  center: null,
   
  /**
  * Parameter: zoom
  * {int}
  */
  zoom: null,
   
  /**
  * Parameter: layers
  * {Array(<OpenLayers.Layer>)}
  */
  layers: null,
   
  /**
  * APIProperty: displayProjection
  * {<OpenLayers.Projection>} Requires proj4js support.
  * Projection used when reading the coordinates from the URL. This will
  *
  * reproject the map coordinates from the URL into the map's
  * projection.
  *
  * If you are using this functionality, be aware that any permalink
  * which is added to the map will determine the coordinate type which
  * is read from the URL, which means you should not add permalinks with
  * different displayProjections to the same map.
  */
  displayProjection: null,
   
  /**
  * Constructor: OpenLayers.Control.ArgParser
  *
  * Parameters:
  * options - {Object}
  */
  initialize: function(options) {
  OpenLayers.Control.prototype.initialize.apply(this, arguments);
  },
   
  /**
  * Method: setMap
  * Set the map property for the control.
  *
  * Parameters:
  * map - {<OpenLayers.Map>}
  */
  setMap: function(map) {
  OpenLayers.Control.prototype.setMap.apply(this, arguments);
   
  //make sure we dont already have an arg parser attached
  for(var i=0, len=this.map.controls.length; i<len; i++) {
  var control = this.map.controls[i];
  if ( (control != this) &&
  (control.CLASS_NAME == "OpenLayers.Control.ArgParser") ) {
   
  // If a second argparser is added to the map, then we
  // override the displayProjection to be the one added to the
  // map.
  if (control.displayProjection != this.displayProjection) {
  this.displayProjection = control.displayProjection;
  }
   
  break;
  }
  }
  if (i == this.map.controls.length) {
   
  var args = OpenLayers.Util.getParameters();
  // Be careful to set layer first, to not trigger unnecessary layer loads
  if (args.layers) {
  this.layers = args.layers;
   
  // when we add a new layer, set its visibility
  this.map.events.register('addlayer', this,
  this.configureLayers);
  this.configureLayers();
  }
  if (args.lat && args.lon) {
  this.center = new OpenLayers.LonLat(parseFloat(args.lon),
  parseFloat(args.lat));
  if (args.zoom) {
  this.zoom = parseInt(args.zoom);
  }
   
  // when we add a new baselayer to see when we can set the center
  this.map.events.register('changebaselayer', this,
  this.setCenter);
  this.setCenter();
  }
  }
  },
   
  /**
  * Method: setCenter
  * As soon as a baseLayer has been loaded, we center and zoom
  * ...and remove the handler.
  */
  setCenter: function() {
   
  if (this.map.baseLayer) {
  //dont need to listen for this one anymore
  this.map.events.unregister('changebaselayer', this,
  this.setCenter);
   
  if (this.displayProjection) {
  this.center.transform(this.displayProjection,
  this.map.getProjectionObject());
  }
   
  this.map.setCenter(this.center, this.zoom);
  }
  },
   
  /**
  * Method: configureLayers
  * As soon as all the layers are loaded, cycle through them and
  * hide or show them.
  */
  configureLayers: function() {
   
  if (this.layers.length == this.map.layers.length) {
  this.map.events.unregister('addlayer', this, this.configureLayers);
   
  for(var i=0, len=this.layers.length; i<len; i++) {
   
  var layer = this.map.layers[i];
  var c = this.layers.charAt(i);
   
  if (c == "B") {
  this.map.setBaseLayer(layer);
  } else if ( (c == "T") || (c == "F") ) {
  layer.setVisibility(c == "T");
  }
  }
  }
  },
   
  CLASS_NAME: "OpenLayers.Control.ArgParser"
  });