code: function(newParams, altUrl) {
  
          // if not altUrl passed in, use layer's url
          var url = altUrl || this.url;
          
          // create a new params hashtable with all the layer params and the 
          // new params together. then convert to string
          var allParams = OpenLayers.Util.extend({}, this.params);
          allParams = OpenLayers.Util.extend(allParams, newParams);
          var paramsString = OpenLayers.Util.getParameterString(allParams);
          
          // if url is not a string, it should be an array of strings, 
          // in which case we will deterministically select one of them in 
          // order to evenly distribute requests to different urls.
          //
          if (OpenLayers.Util.isArray(url)) {
              url = this.selectUrl(paramsString, url);
          }   
   
          // ignore parameters that are already in the url search string
          var urlParams = 
              OpenLayers.Util.upperCaseObject(OpenLayers.Util.getParameters(url));
          for(var key in allParams) {
              if(key.toUpperCase() in urlParams) {
                  delete allParams[key];
              }
          }
          paramsString = OpenLayers.Util.getParameterString(allParams);
          
          return OpenLayers.Util.urlAppend(url, paramsString);
      }
docs: Method: getFullRequestString
  Combine url with layer's params and these newParams.
  
  does checking on the serverPath variable, allowing for cases when it
  is supplied with trailing ? or &, as well as cases where not.
  
  return in formatted string like this:
  "server?key1=value1&key2=value2&key3=value3"
  
  WARNING: The altUrl parameter is deprecated and will be removed in 3.0.
  
  Parameters:
  newParams - {Object}
  altUrl - {String} Use this as the url instead of the layer's url
  
  Returns:
  {String}