GSmapSearchControl.ACTIVE_MAP_ZOOM = 13;GSmapSearchControl.IDLE_MAP_ZOOM = 13;GSmapSearchControl.MAP_TYPE_ENABLE_ALL = 1;GSmapSearchControl.MAP_TYPE_ENABLE_ACTIVE = 2;GSmapSearchControl.ZOOM_CONTROL_ENABLE_ALL = 1;GSmapSearchControl.DEFAULT_RESULT_LIST = 1;GSmapSearchControl.DRIVING_DIRECTIONS_FROM_CENTER = 1;GSmapSearchControl.DRIVING_DIRECTIONS_FROM_USER = 2;function GSmapSearchControl(container, mapCenter, opt_options) {  this.letteredIconMode = true;  this.userSelectedDirectionsMode = false;  this.onBootCompleteHandler = null;  this.enableResultsContainer = false;  this.enableIdleZoomControl = true;  this.enableActiveZoomControl = true;  this.enableIdleMapType = false;  this.enableActiveMapType = false;  this.root = container;  this.linkTarget = GSearch.LINK_TARGET_BLANK;  this.ads = null;  this.buildContainerGuts();  this.activeMapZoom = GSmapSearchControl.ACTIVE_MAP_ZOOM;  this.idleMapZoom = GSmapSearchControl.IDLE_MAP_ZOOM;  // result scroller  this.currentResultIndex = 0;  this.markers = new Array();  this.idle = true;  // bind up the controls  this.searchForm.input.onclick = GSmapsc_methodClosure(this, GSmapSearchControl.prototype.onPreActive, []);  this.searchForm.input.onfocus = GSmapsc_methodClosure(this, GSmapSearchControl.prototype.onPreActive, []);  this.searchForm.setOnSubmitCallback(this,GSmapSearchControl.prototype.formSubmit);  this.cancel.onclick = GSmapsc_methodClosure(this, GSmapSearchControl.prototype.goIdle, []);  this.next.onclick = GSmapsc_methodClosure(this, GSmapSearchControl.prototype.onNext, []);  this.prev.onclick = GSmapsc_methodClosure(this, GSmapSearchControl.prototype.onPrev, []);  // build the icons  this.selectedIcon = new GIcon();  this.selectedIcon.image = "http://www.google.com/mapfiles/gadget/markerSmall80.png";  this.selectedIcon.shadow = "http://www.google.com/mapfiles/gadget/shadow50Small80.png";  this.selectedIcon.iconSize = new GSize(16, 27);  this.selectedIcon.shadowSize = new GSize(30, 28);  this.selectedIcon.iconAnchor = new GPoint(8, 27);  this.selectedIcon.infoWindowAnchor = new GPoint(5, 1);  this.unselectedIcon = new GIcon(this.selectedIcon);  this.unselectedIcon.image = "http://www.google.com/mapfiles/gadget/markerSmall80.png";  this.centerIcon = new GIcon(this.selectedIcon);  this.centerIcon.image = "http://www.google.com/mapfiles/gadget/arrowSmall80.png";  this.centerIcon.shadow = "http://www.google.com/mapfiles/gadget/arrowshadowSmall80.png";;  this.centerIcon.iconSize = new GSize(31, 27);  this.centerIcon.shadowSize = new GSize(31, 27);  this.centerIcon.iconAnchor = new GPoint(8, 27);  this.centerIcon.infoWindowAnchor = new GPoint(5, 1);  this.letteredIcons = new Array();  for ( var i=0; i < 16; i++ ) {    var icon = new GIcon(this.selectedIcon);    var iconImageKey =    icon.image = "http://www.google.com/mapfiles/gadget/letters/marker" +                      String.fromCharCode(65+i) + ".png";    this.letteredIcons[i] = icon;  }  this.mapCenterString = null;  this.titleOverride = null;  // handle title and url  if (opt_options) {    var title = null;    var url = null;    if (opt_options.linkTarget) {      this.linkTarget = opt_options.linkTarget;    }    if (opt_options.title) {      title = opt_options.title;    }    if (opt_options.url) {      url = opt_options.url;    }    if (url && title) {      var div = GSmapsc_createDiv(null,"gsmsc-user-title");      var link = GSmapsc_createLink(url, title, this.linkTarget, "gsmsc-user-title");      div.appendChild(link);      this.titleOverride = div;    }    if (opt_options.hotspots) {      // whip through the hotspots and bind away...      for (var i=0; i < opt_options.hotspots.length; i++) {        var hs = opt_options.hotspots[i];        hs.element.onclick = GSmapsc_methodClosure(this, GSmapSearchControl.prototype.newSearch, [hs.query]);      }    }    // allow custom center marker    if (opt_options.centerIcon) {      this.centerIcon = opt_options.centerIcon;    }    // allow custom selected marker    if (opt_options.selectedIcon) {      this.selectedIcon = opt_options.selectedIcon;      this.letteredIconMode = false;    }    // allow custom unselected marker    if (opt_options.unselectedIcon) {      this.unselectedIcon = opt_options.unselectedIcon;      this.letteredIconMode = false;    }    // allow zoom level specification    if (opt_options.idleMapZoom) {      this.idleMapZoom = opt_options.idleMapZoom;    }    if (opt_options.activeMapZoom) {      this.activeMapZoom = opt_options.activeMapZoom;    }    if (opt_options.mapTypeControl) {      if (opt_options.mapTypeControl == GSmapSearchControl.MAP_TYPE_ENABLE_ALL) {        this.enableIdleMapType = true;        this.enableActiveMapType = true;      } else if (opt_options.mapTypeControl == GSmapSearchControl.MAP_TYPE_ENABLE_ACTIVE) {        this.enableIdleMapType = false;        this.enableActiveMapType = true;      } else {        this.enableIdleMapType = false;        this.enableActiveMapType = false;      }    }    if (opt_options.zoomControl) {      if (opt_options.zoomControl == GSmapSearchControl.ZOOM_CONTROL_ENABLE_ALL) {        this.enableIdleZoomControl = true;        this.enableActiveZoomControl = true;      }    }    // ads array    if (opt_options.ads) {      this.ads = opt_options.ads;    }    // results list    if (opt_options.showResultList) {      this.resultsList = GSmapsc_createDiv(null, "gsmsc-resultsBox");      if (opt_options.showResultList == GSmapSearchControl.DEFAULT_RESULT_LIST ) {        this.appContainer.appendChild(this.resultsList);      } else {        GSmapsc_removeChildren(opt_options.showResultList);        opt_options.showResultList.appendChild(this.resultsList);      }    }    // driving directions    if (opt_options.drivingDirections) {      if (opt_options.drivingDirections ==          GSmapSearchControl.DRIVING_DIRECTIONS_FROM_USER) {        this.userSelectedDirectionsMode = true;      } else if (opt_options.drivingDirections ==                 GSmapSearchControl.DRIVING_DIRECTIONS_FROM_CENTER) {        this.userSelectedDirectionsMode = false;      } else {        this.userSelectedDirectionsMode = false;      }    }  }  // onBootComplete  if (opt_options.onBootComplete) {    this.onBootCompleteHandler = opt_options.onBootComplete;  }  // be kind, since typically a lot is going on at load...  this.startupTimer = setTimeout(GSmapsc_methodClosure(this, GSmapSearchControl.prototype.deferLoad, [mapCenter]), 100);}GSmapSearchControl.prototype.deferLoad = function(mapCenter) {  // allow mapCenter to be a string or a GLatLng  if ( mapCenter && mapCenter.lat && mapCenter.lng ) {    var lat;    var lng;    if (typeof mapCenter.lat == "function") {      lat = mapCenter.lat();    } else {      lat = mapCenter.lat;    }    if (typeof mapCenter.lng == "function" ) {      lng = mapCenter.lng();    } else {      lng = mapCenter.lng;    }    this.mapCenterString = lat + ", " + lng;    this.mapCenter = new GLatLng(lat, lng);    this.bootComplete(null);  } else {    // use ajax search based geocode    this.mapCenter = null;    this.mapCenterString = mapCenter;    var gsLookup = new GlocalSearch();    gsLookup.setSearchCompleteCallback(this, GSmapSearchControl.prototype.bootComplete, [gsLookup]);    gsLookup.execute(mapCenter);  }}GSmapSearchControl.prototype.buildContainerGuts = function() {  // build out the map divs and search form  GSmapsc_removeChildren(this.root);  this.appContainer = GSmapsc_createDiv(null, "gsmsc-appContainer");  this.resultsList = null;  // active map div  this.mapDiv = GSmapsc_createDiv(null, "gsmsc-mapDiv");  this.appContainer.appendChild(this.mapDiv);  this.attributionDiv = GSmapsc_createDiv(null, "gsmsc-attributionDiv");  this.appContainer.appendChild(this.attributionDiv);  // idle map div  this.idleMapDiv = GSmapsc_createDiv(null, "gsmsc-idleMapDiv");  this.appContainer.appendChild(this.idleMapDiv);  var div = GSmapsc_createDiv(null, "gsmsc-controls");  this.searchForm = new GSearchForm(false, div);  // controls  this.prevNext = GSmapsc_createDiv(null, "gsmsc-prevNext");  this.prev = GSmapsc_createDiv(null, "gsmsc-prev");  this.cancel = GSmapsc_createDiv(null, "gsmsc-cancel");  this.next = GSmapsc_createDiv(null, "gsmsc-next");  this.tooltip = GSmapsc_createDiv(GSearch.strings["scroll-results"],                                   "gsmsc-tooltip");  this.prev.innerHTML = "&nbsp;";  this.cancel.innerHTML = "&nbsp;";  this.next.innerHTML = "&nbsp;";  this.prev.title = GSearch.strings["previous"];  this.cancel.title = GSearch.strings["clear-results"];  this.next.title = GSearch.strings["next"];  this.prevNext.appendChild(this.prev);  this.prevNext.appendChild(this.cancel);  this.prevNext.appendChild(this.next);  this.prevNext.appendChild(this.tooltip);  this.searchForm.userDefinedCell.appendChild(this.prevNext);  this.appContainer.appendChild(div);  this.root.appendChild(this.appContainer);}// finish boot process by creating and centering our map(s)GSmapSearchControl.prototype.bootComplete = function(gs) {  if ( gs && gs.results && gs.results.length > 0 ) {    // extract map center from first search result    this.mapCenter = new GLatLng(parseFloat(gs.results[0].lat),                                 parseFloat(gs.results[0].lng));    var res0 = gs.results[0];    var resHtml = res0.html.cloneNode(true);    var div;    if (this.titleOverride) {      div = GSmapsc_createDiv(null, "gsmsc-user-title gsmsc-result-wrapper-user-selected-directions");      div.appendChild(this.titleOverride);    } else {      div = GSmapsc_createDiv(null, "gsmsc-result-wrapper-user-selected-directions");    }    div.appendChild(resHtml);    this.mapCenterHtml = div;  } else if (this.mapCenter == null) {    this.mapCenter = new GLatLng(37.421947, -122.084391);    this.mapCenterString = this.mapCenter.lat() + ", " + this.mapCenter.lng();  }  // if we have no html, make it  if (!this.mapCenterHtml) {    var div;    if (this.titleOverride) {      div = GSmapsc_createDiv(null, "gsmsc-user-title");      div.appendChild(this.titleOverride);    } else {      div = GSmapsc_createDiv(this.mapCenterString, "gsmsc-user-title");    }    // from user-prompt To Here    var toUrl = "http://www.google.com/maps?source=uds&daddr=" +      this.mapCenterString + "&iwstate1=dir:to";    var fromUrl = "http://www.google.com/maps?source=uds&saddr=" +      this.mapCenterString + "&iwstate1=dir:from";    var dwrap = GSmapsc_createDiv(null, "gsmsc-directions-wrapper");    var ditem = GSmapsc_createDiv(GSearch.strings["get-directions"]+":",                                  "gsmsc-directions-label");    dwrap.appendChild(ditem);    // to here    var ditem = GSmapsc_createLink(toUrl, GSearch.strings["to-here"], this.linkTarget,                                   "gsmsc-directions-link");    dwrap.appendChild(ditem);    // spacer    var ditem = GSmapsc_createDiv("-", "gsmsc-directions-spacer");    dwrap.appendChild(ditem);    // from here    var ditem = GSmapsc_createLink(fromUrl, GSearch.strings["from-here"], this.linkTarget,                                   "gsmsc-directions-link");    dwrap.appendChild(ditem);    div.appendChild(dwrap);    this.mapCenterHtml = div;  }  // create the maps and add conditional controls  this.gmap = new GMap2(this.mapDiv);  if (this.enableActiveZoomControl) {    //this.gmap.addControl(new GSmallMapControl());	this.gmap.addControl(new GLargeMapControl());  }  if (this.enableActiveMapType) {	this.gmap.addControl(new GMapTypeControl());  }  this.gmap.setCenter(this.mapCenter, this.activeMapZoom);  this.idleGmap = new GMap2(this.idleMapDiv);  if (this.enableIdleZoomControl) {    //this.idleGmap.addControl(new GSmallMapControl());	this.idleGmap.addControl(new GLargeMapControl());  }  if (this.enableIdleMapType) {    this.idleGmap.addControl(new GMapTypeControl());  }  this.idleGmap.setCenter(this.mapCenter, this.idleMapZoom);  // create a searcher and bind to the map  this.gs = new GlocalSearch();  this.gs.setResultSetSize(GSearch.LARGE_RESULTSET);  this.gs.setLinkTarget(this.linkTarget);  this.gs.setCenterPoint(this.mapCenter);  this.gs.setSearchCompleteCallback(this, GSmapSearchControl.prototype.searchComplete, [null]);  if (this.ads) {    for (var i=0; i<this.ads.length; i++) {      this.gs.addRelatedSearcher(this.ads[i]);    }  }  this.idleMarker = new GMarker(this.mapCenter, this.centerIcon);  this.mapCenterMarker = new GMarker(this.mapCenter, this.centerIcon);  GEvent.bind(this.mapCenterMarker, "click", this, this.onCenterClick);  GEvent.bind(this.idleMarker, "click", this, this.onIdleCenterClick);  this.gmap.addOverlay(this.mapCenterMarker);  this.idleGmap.addOverlay(this.idleMarker);  GEvent.bind(this.gmap, "click", this, this.onMapClick);  this.goIdle();  if (this.onBootCompleteHandler) {    this.onBootCompleteHandler(this);  }}// show the center of the mapGSmapSearchControl.prototype.onCenterClick = function() {  this.mapCenterMarker.openInfoWindow(this.mapCenterHtml, {maxWidth:200});}// show the center of the mapGSmapSearchControl.prototype.onIdleCenterClick = function() {  // transition to semi-active state and open the center info window  this.clearMarkers();  GSmapsc_cssSetClass(this.prevNext, "gsmc-prevNext gsmsc-prev-next-active");  GSmapsc_cssSetClass(this.appContainer, "gsmsc-appContainer gsmsc-active");  GSmapsc_cssSetClass(this.prev, "gsmsc-prev gsmsc-prev-idle");  GSmapsc_cssSetClass(this.next, "gsmsc-next gsmsc-next-idle");  this.searchForm.input.value = "";  this.gmap.checkResize();  this.idle = false;  this.mapCenterMarker.openInfoWindow(this.mapCenterHtml, {maxWidth:200});}// clear the old markers off of the mapGSmapSearchControl.prototype.clearMarkers = function() {  GSmapsc_cssSetClass(this.prevNext, "gsmc-prevNext gsmsc-prev-next-idle");  this.gmap.closeInfoWindow();  for (var i=0; i < this.markers.length; i++) {    this.gmap.removeOverlay(this.markers[i].marker);    this.markers[i].resultsListItem = null;  }  // clear results list if present  if (this.resultsList) {    GSmapsc_removeChildren(this.resultsList);  }  // result scroller  this.currentResultIndex = 0;  this.markers = new Array();}// drop the new markers on the mapGSmapSearchControl.prototype.setMarkers = function() {  // result scroller  this.currentResultIndex = 0;  this.markers = new Array();  var bestResultUrl = null;  if ( this.gs.results && this.gs.results.length > 0) {    for (var i = 0; i < this.gs.results.length && i < 16; i++) {      var result = this.gs.results[i];      var icon = this.unselectedIcon;      if (this.letteredIconMode) {		  //if(displayHotel) {			// icon = hotel;		  //} else {          	icon = this.letteredIcons[i];		  //}      }      this.markers.push(new GSmapscLocalResult(this, result, icon, i));      // find the first, non-address result and hold on to it for the more-link      if (bestResultUrl == null && !result.addressLookupResult ) {        bestResultUrl = result.url;      }    }    GSmapsc_cssSetClass(this.prevNext, "gsmc-prevNext gsmsc-prev-next-active");    GSmapsc_cssSetClass(this.appContainer, "gsmsc-appContainer gsmsc-active");    this.gmap.checkResize();    this.idle = false;    this.selectMarker(0);    // stuff in a more results link    if (this.resultsList) {      if (bestResultUrl) {        // NOW, take the URL and nuke from &latlnt.*&near ->&near        var newUrl = bestResultUrl.replace(/&latlng=.*&near/,"&near");        var moreDiv = GSmapsc_createDiv(null, "gsmsc-result-list-more-results");        var alink = GSmapsc_createLink(newUrl, GSearch.strings["more-results"],                                       this.linkTarget, "gsmsc-result-list-more-results");        moreDiv.appendChild(alink);        var clearDiv = GSmapsc_createDiv(GSearch.strings["clear-results-uc"],                                "gsmsc-result-list-clear-results");        clearDiv.onclick = GSmapsc_methodClosure(this,                                            GSmapSearchControl.prototype.goIdle,                                            []);        // create a table for these to sit within        var table = GSmapsc_createTable("gsmsc-result-controls");        var row = GSmapsc_createTableRow(table);        var moreTd = GSmapsc_createTableCell(                        row, "gsmsc-result-list-more-results");        var clearTd = GSmapsc_createTableCell(                        row, "gsmsc-result-list-clear-results");        moreTd.appendChild(moreDiv);        clearTd.appendChild(clearDiv);        this.resultsList.appendChild(table);      }    }  }}// light up the selected markerGSmapSearchControl.prototype.selectMarker = function(index) {  // clear info window and reset icon on current marker  this.gmap.closeInfoWindow();  var icon = this.unselectedIcon;  if (this.letteredIconMode) {    icon = this.letteredIcons[this.currentResultIndex];  }  this.markers[this.currentResultIndex].setMarker(icon);  // if we have a results list, clear selected  if (this.markers[this.currentResultIndex].resultsListItem) {    GSmapsc_cssSetClass(this.markers[this.currentResultIndex].resultsListItem,                        "gsmsc-result-list-item");  }  // snap to current  this.currentResultIndex = index;  // light up current  var result = this.markers[this.currentResultIndex];  if (result.resultsListItem) {    GSmapsc_cssSetClass(result.resultsListItem,                        "gsmsc-result-list-item gsmsc-selected");  }  var icon = this.selectedIcon;  if (this.letteredIconMode) {    icon = this.letteredIcons[this.currentResultIndex];  }  result.setMarker(icon);  result.marker.openInfoWindow(result.getHtml(), {maxWidth:200});  // set scroller  if (index == 0) {    GSmapsc_cssSetClass(this.prev, "gsmsc-prev gsmsc-prev-idle");  } else {    GSmapsc_cssSetClass(this.prev, "gsmsc-prev gsmsc-prev-active");  }  if (index == this.markers.length - 1) {    GSmapsc_cssSetClass(this.next, "gsmsc-next gsmsc-next-idle");  } else {    GSmapsc_cssSetClass(this.next, "gsmsc-next gsmsc-next-active");  }}// clear current markers and start a new searchGSmapSearchControl.prototype.formSubmit = function(form) {  if (form.input.value) {    this.newSearch(form.input.value);  }  return false;}// clear current markers and start a new searchGSmapSearchControl.prototype.execute = function(opt_query) {  // hyperlink friendly...  this.newSearch(opt_query);}GSmapSearchControl.prototype.newSearch = function(opt_query) {  if (opt_query) {    this.searchForm.input.value  = opt_query;  }  if (this.searchForm.input.value) {    // clear markers, set prev/next    this.clearMarkers();    GSmapsc_removeChildren(this.attributionDiv);    this.gs.execute(this.searchForm.input.value);  }  return false;}GSmapSearchControl.prototype.searchComplete = function() {  var attribution = this.gs.getAttribution();  if (attribution) {    this.attributionDiv.appendChild(attribution);  }  this.setMarkers();}// forwards through the search resultsGSmapSearchControl.prototype.onNext = function() {  if (this.currentResultIndex < this.markers.length - 1) {    this.selectMarker(this.currentResultIndex+1);  }}// backwards through the search resultsGSmapSearchControl.prototype.onPrev = function() {  if (this.currentResultIndex > 0) {    this.selectMarker(this.currentResultIndex-1);  }}// called onboot complete, and on cancel clickGSmapSearchControl.prototype.goIdle = function() {  this.searchForm.input.value = GSearch.strings["search-the-map"];  this.gmap.setCenter(this.mapCenter, this.activeMapZoom);  this.idleGmap.setCenter(this.gmap.getCenter(), this.idleMapZoom);  GSmapsc_cssSetClass(this.appContainer, "gsmsc-appContainer gsmsc-idle");  GSmapsc_cssSetClass(this.prevNext, "gsmc-prevNext gsmsc-prev-next-idle");  this.idleGmap.checkResize();  this.idle = true;  // if we are doing resultsList, clear...  if (this.resultsList) {    GSmapsc_removeChildren(this.resultsList);  }}// call onfocus/onclick for search input cellGSmapSearchControl.prototype.onPreActive = function() {  if (this.idle) {    this.searchForm.input.value = "";  }}GSmapSearchControl.prototype.onMapClick = function(marker, point) {  if (marker && marker.__ls__) {    var localResult = marker.__ls__;    localResult.onClick();  }}// A class representing a single Local Search result returned by the// Google AJAX Search API.function GSmapscLocalResult(gsmsc, result, icon, index) {  this.gsmsc = gsmsc;  this.result = result;  this.latLng = new GLatLng(parseFloat(result.lat), parseFloat(result.lng));  this.index = index;  this.setMarker(icon);  if (gsmsc.resultsList) {    var div = GSmapsc_createDiv(null, "gsmsc-result-list-item");    if (gsmsc.letteredIconMode) {      var key = GSmapsc_createDiv("(" + String.fromCharCode(65+index) + ")",                                  "gsmsc-result-list-item-key");      div.appendChild(key);    }    var tdiv = GSmapsc_createDiv(result.title, "gs-title");    div.appendChild(tdiv);    if (!result.addressLookupResult) {      if (result.streetAddress && result.streetAddress != "") {        var str = "&nbsp;-&nbsp;" + result.streetAddress;        var tdiv = GSmapsc_createDiv(str, "gs-street");        div.appendChild(tdiv);      }    }    div.onclick = GSmapsc_methodClosure(                    gsmsc, GSmapSearchControl.prototype.selectMarker, [index]);    this.resultsListItem = div;    gsmsc.resultsList.appendChild(div)  } else {    this.resultsListItem = null;  }}GSmapscLocalResult.prototype.getHtml = function() {  var wrapperClass = "gsmsc-result-wrapper";  if (this.gsmsc.userSelectedDirectionsMode) {    wrapperClass += " gsmsc-result-wrapper-user-selected-directions";  }  var result = GSmapsc_createDiv(null, wrapperClass);  var node = this.result.html.cloneNode(true);  result.appendChild(node);  return result;}GSmapscLocalResult.prototype.setMarker = function(icon) {  if (this.marker) {    this.gsmsc.gmap.removeOverlay(this.marker);    this.marker.__ls__ = null;    var marker = this.marker;    this.marker = null;    delete(marker);  }  this.marker = new GMarker(this.latLng, icon);  this.marker.__ls__ = this;  this.gsmsc.gmap.addOverlay(this.marker);}GSmapscLocalResult.prototype.onClick = function() {  this.gsmsc.selectMarker(this.index);}/** * Various Static DOM Wrappers.*/function GSmapsc_methodClosure(object, method, opt_argArray) {  return function() {    return method.apply(object, opt_argArray);  }}function GSmapsc_methodCallback(object, method) {  return function() {    return method.apply(object, arguments);  }}function GSmapsc_createDiv(opt_text, opt_className) {  var el = document.createElement("div");  if (opt_text) {    el.innerHTML = opt_text;  }  if (opt_className) { el.className = opt_className; }  return el;}function GSmapsc_removeChildren(parent) {  while (parent.firstChild) {    parent.removeChild(parent.firstChild);  }}function GSmapsc_cssSetClass(el, className) {  el.className = className;}function GSmapsc_createForm(opt_className) {  var el = document.createElement("form");  if (opt_className) { el.className = opt_className; }  return el;}function GSmapsc_createTable(opt_className) {  var el = document.createElement("table");  if (opt_className) { el.className = opt_className; }  return el;}function GSmapsc_createTableRow(table) {  var tr = table.insertRow(-1);  return tr;}function GSmapsc_createTableCell(tr, opt_className) {  var td = tr.insertCell(-1);  if (opt_className) { td.className = opt_className; }  return td;}function GSmapsc_createTextInput(opt_className) {  var el = document.createElement("input");  el.type = "text";  if (opt_className) { el.className = opt_className; }  return el;}function GSmapsc_createLink(href, text, opt_target, opt_className) {  var el = document.createElement("a");  el.href = href;  el.appendChild(document.createTextNode(text));  if (opt_className) {    el.className = opt_className;  }  if (opt_target) {    el.target = opt_target;  }  return el;}