3a4,6
> global $baselayers_separator, $baselayer_options_separator;
> $baselayers_separator = ';';
> $baselayer_options_separator = ',';
132c135,139
<     $baselayers = explode(',', $attrs['baselayers']);
---
> 	$google_src_set = FALSE;
> 	$multimap_src_set = FALSE;
> 	$ve_set = FALSE;
> 	$yahoo_set = FALSE;
>     $baselayers = get_baselayers($attrs['baselayers']);
135c141,144
<       switch ($baselayer) {
---
>       $baselayer_vendor = $baselayer['baselayer_vendor'];
>       //$variant = $baselayer['variant'];
>       //$baselayer_options = $baselayer['baselayer_options'];
>       switch ($baselayer_vendor) {
136a146
> 	      if($google_src_set == FALSE) {
138a149,150
> 		    $google_src_set = TRUE;
> 		  }
140a153
> 	      if($multimap_src_set == FALSE) {
141a155,156
> 		    $google_src_set = TRUE;
> 		  }
143a159
> 	      if($ve_src_set == FALSE) {
144a161,162
> 		    $google_src_set = TRUE;
> 		  }
146a165
> 	      if($yahoo_src_set == FALSE) {
147a167,168
> 		    $yahoo_src_set = TRUE;
> 		  }
285c306,309
<     if (isset($map['extent'])) {
---
>     if (isset($map['restrictedextent'])) {
>       $map['maxextent'] = $map['restrictedextent'];
>     }
>     elseif (isset($map['extent'])) {
301c325,336
<     if (isset($map['maxextent'])) {
---
> 	if (isset($map['restrictedextent'])) {
>       $restrictedextent = explode(',', $map['restrictedextent']);
>       if (!$maxResolution) {
>         $maxResolution = max(($restrictedextent[2] - $restrictedextent[0])/$map['width']
>           , ($restrictedextent[3] - $restrictedextent[1])/$map['height']);
>       }
> 
>       $js .= "var extent = new OpenLayers.Bounds({$map['restrictedextent']});\n";
>       $js .= "map_options.restrictedExtent = extent;\n";
>       $js .= "map_options.maxExtent = extent;\n";
>     }
>     elseif (isset($map['maxextent'])) {
342,347c377,382
<       $baselayers = explode(',', $map['baselayers']);
<       foreach ($baselayers as $baselayer_variant) {
<         $tmp = explode('-', $baselayer_variant);
<         $baselayer = $tmp[0];
<         $variant = count($tmp) > 1 ? strtolower($tmp[1]) : 'default';
<         switch ($baselayer) {
---
>       $baselayers = get_baselayers($map['baselayers']);
>       foreach ($baselayers as $baselayer) {
>         $baselayer_vendor = $baselayer['baselayer_vendor'];
>         $variant = $baselayer['variant'];
>         $baselayer_options = $baselayer['baselayer_options'];
>         switch ($baselayer_vendor) {
351c386
<           $variants = array('default' => 'G_HYBRID_MAP', 'streets' => 'G_HYBRID_MAP', 'satellite' => 'G_SATELLITE_MAP', 'hybrid' => 'G_HYBRID_MAP');
---
>           $variants = array('default' => 'G_HYBRID_MAP', 'streets' => 'G_NORMAL_MAP', 'satellite' => 'G_SATELLITE_MAP', 'hybrid' => 'G_HYBRID_MAP', 'physical' => 'G_PHYSICAL_MAP');
354c389,408
<           $js .= "  client.google = new OpenLayers.Layer.Google('Google - $variant', {type: $type, 'sphericalMercator': $sphericalMercator, 'numZoomLevels': 20, opacity: 0.8});\n";
---
>           $js .= " var layer_options = {};\n";
>           $js .= "layer_options.type = {$type};\n";
> 	      $js .= "layer_options.sphericalMercator = {$sphericalMercator};\n";
> 	      foreach($baselayer_options as $option => $value) {
> 	        switch($option) {
> 	          case 'opacity':
> 		        $js .= "layer_options.opacity = $value;\n";
> 		      break;
> 	          case 'minzoomlevel':
> 	            $js .= "layer_options.MIN_ZOOM_LEVEL = $value;\n";
> 	          break;
> 	          case 'numzoomlevels':
> 	            $js .= "layer_options.numZoomLevels = $value;\n";
> 	          break;
> 	          default:
> 	            $js .= "layer_options.$option = $value;\n";
> 	          break;
> 	        }
> 	      }
>           $js .= "  client.google = new OpenLayers.Layer.Google('Google - $variant', layer_options);\n";
363c417,436
<           $js .= "  client.ve = new OpenLayers.Layer.VirtualEarth('Virtual Earth - $variant', {'type': VEMapStyle.$type, 'sphericalMercator': $sphericalMercator, 'numZoomLevels': 20, opacity: 0.8});\n";
---
>           $js .= " var layer_options = {};\n";
> 	      $js .= "layer_options.type = VEMapStyle.$type;\n";
> 	      $js .= "layer_options.sphericalMercator = {$sphericalMercator};\n";
> 	      foreach($baselayer_options as $option => $value) {
> 	        switch($option) {
> 	          case 'opacity':
> 		        $js .= "layer_options.opacity = $value;\n";
> 		      break;
> 	          case 'minzoomlevel':
> 	            $js .= "layer_options.MIN_ZOOM_LEVEL = $value;\n";
> 	          break;
> 	          case 'numzoomlevels':
> 	            $js .= "layer_options.numZoomLevels = $value;\n";
> 	          break;
> 	          default:
> 	            $js .= "layer_options.$option = $value;\n";
> 	          break;
> 	        }
> 	      }
>           $js .= "  client.ve = new OpenLayers.Layer.VirtualEarth('Virtual Earth - $variant', layer_options);\n";
372c445,464
<           $js .= "  client.yahoo = new OpenLayers.Layer.Yahoo('Yahoo - $variant', {'type': $type, 'sphericalMercator': $sphericalMercator});\n";
---
>           $js .= " var layer_options = {};\n";
> 	      $js .= "layer_options.type = {$type};\n";
> 	      $js .= "layer_options.sphericalMercator = {$sphericalMercator};\n";
> 	      foreach($baselayer_options as $option => $value) {
> 	        switch($option) {
> 	          case 'opacity':
> 		        $js .= "layer_options.opacity = $value;\n";
> 		      break;
> 	          case 'minzoomlevel':
> 	            $js .= "layer_options.MIN_ZOOM_LEVEL = $value;\n";
> 	          break;
> 	          case 'numzoomlevels':
> 	            $js .= "layer_options.numZoomLevels = $value;\n";
> 	          break;
> 	          default:
> 	            $js .= "layer_options.$option = $value;\n";
> 	          break;
> 	        }
> 	      }
>           $js .= "  client.yahoo = new OpenLayers.Layer.Yahoo('Yahoo - $variant', layer_options);\n";
792a885,912
> function get_baselayers($baselayers_str) {
>   $baselayers = array();
>   global $baselayers_separator, $baselayer_options_separator;
>   $baselayers_arr = explode($baselayers_separator, $baselayers_str);
>   $i = 0;
>   foreach($baselayers_arr as $baselayer_info) {
>     $tmp = explode($baselayer_options_separator, $baselayer_info);
>     $baselayer_variant = $tmp[0];
>     $baselayer_options = (count($tmp) > 1) ? array_splice($tmp, 1) : array();
>     $tmp = explode('-', $baselayer_variant);
>     $baselayer_vendor = $tmp[0];
>     $variant = (count($tmp) > 1) ? strtolower($tmp[1]) : 'default';
>     $baselayers[$i]['baselayer_vendor'] = $baselayer_vendor;
>     $baselayers[$i]['variant'] = $variant;
>     $baselayers[$i]['baselayer_options'] = get_baselayer_options($baselayer_options);
>     $i++;
>   }
>   return $baselayers;
> }
> 
> function get_baselayer_options($options) {
>   $baselayer_options = array();
>   foreach($options as $option) {
>     $tmp = explode('=', $option);
>     $baselayer_options[$tmp[0]] = $tmp[1];
>   }
>   return $baselayer_options;
> }
\ No newline at end of file
