          //<![CDATA[
            self.string_to_xml = function (string) {
              var xmlobject = null;
              string = string.replace(/<!--/,'').replace(/-->/,'')
              if (window.ActiveXObject) {
                xmlobject=new ActiveXObject("Microsoft.XMLDOM");
                xmlobject.async = "false";
                xmlobject.loadXML(string);
              } else {
                var xmlstring = '<?'+'xml version="1.0"?>'+string;
                xmlobject = (new DOMParser()).parseFromString(xmlstring, "text/xml");
              }
              return xmlobject;
            }
            self.xml_xslt_transform = function (xml,xslt){
              var mydiv = document.createElement('DIV');
              if (window.ActiveXObject) {
                mydiv.innerHTML = xml.transformNode(xslt);
              } else if (document.implementation && document.implementation.createDocument) {
                xsltProcessor=new XSLTProcessor();
                xsltProcessor.importStylesheet(xslt);
                mydiv.appendChild(xsltProcessor.transformToFragment(xml,document));
              }
              return mydiv.firstChild;
            }
            self.show_large = function (a,b) {
              if (document.getElementById('overlay')) document.getElementById('overlay').parentNode.removeChild(document.getElementById('overlay'))
              var ind = a
              var tooltip = xml_xslt_transform(string_to_xml("<overlay><u>"+memberobj['members'][b][ind].u+"</u><h>"+memberobj['members'][b][ind].h+"</h><a>"+memberobj['members'][b][ind].a+"</a><z>"+memberobj['members'][b][ind].z+"</z><f>"+memberobj['members'][b][ind].f+"</f><p>"+memberobj['members'][b][ind].p+"</p><lu><![CDATA["+memberobj['members'][b][ind].lu+"]]></lu><o>"+memberobj['members'][b][ind].o+"</o></overlay>"),xtemp);
              if ( document.location.href.match(/\:7226/)) {
                tooltip = xml_xslt_transform(string_to_xml("<overlay><u>"+memberobj['members'][b][ind].u+"</u><h>"+memberobj['members'][b][ind].x+"</h><a>"+memberobj['members'][b][ind].y+"</a><z>"+memberobj['members'][b][ind].z+"</z><f>"+memberobj['members'][b][ind].f+"</f><p>"+memberobj['members'][b][ind].p+"</p><lu><![CDATA["+memberobj['members'][b][ind].lu+"]]></lu><o>"+memberobj['members'][b][ind].o+"</o></overlay>"),xtemp);
              }
              document.getElementById("map").appendChild(tooltip);
              var point = map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(),map.getZoom());
              var offset = map.getCurrentMapType().getProjection().fromLatLngToPixel(marker[b][ind].getPoint(),map.getZoom());
              var anchor = marker[b][ind].getIcon().iconAnchor;
              var dx = offset.x - point.x - anchor.x - 46;
              var dy = - offset.y + point.y - 100;
              if (memberobj.width < (offset.x - point.x - anchor.x - 46 + 148)) {
                dx = memberobj.width - 146;
              } else if (dx < 0) {
                dx = 0;
              }
              if (dy < 0) {
                dy = 0;
              } else if (dy > (memberobj.height - 236)) {
                dy = memberobj.height - 236
              }
              var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(dx, dy )); 
              pos.apply(tooltip);
            }
            self.show_small = function (a) {
                self.show_it = 0;
                if (document.getElementById('overlay')) {
                    setTimeout(function() { if (document.getElementById('overlay')&&!self.show_it) { document.getElementById('overlay').parentNode.removeChild(document.getElementById('overlay'))}
},100);
                }
            }
            self.init = function () {
              self.xtemp = string_to_xml(document.getElementById('xslt_template').innerHTML);
              if (GBrowserIsCompatible()) {
                if (!self.memberobj) {
                  self.memberobj = {
                    lat: (self.fp ? fp.lat : '37.4006'),
                    lon: (self.fp ? fp.lon : '-121.9635'),
                    zoom:11,
                    width: (self.fp ? fp.width : 300),
                    height: (self.fp ? fp.height : 250),
                    members:{},
                    varname: (self.fp ? fp.varname : ''),
                    fake:1}
                }
                document.getElementById('map').style.width = memberobj.width+'px'
                document.getElementById('map').style.height = memberobj.height+'px'
                self.map = new GMap2(document.getElementById('map'));
                map.setCenter(new GLatLng(memberobj.lat, memberobj.lon), memberobj.zoom);
                map.disableDragging();
                var mt = map.getMapTypes();
                if (memberobj.fake) {
                  if (!self.fpm) { self.fpm = []};
                  self.bounds = map.getBounds();
                  self.sw = bounds.getSouthWest();
                  self.ne = bounds.getNorthEast();
                  self.lngs = ne.lng() - sw.lng();
                  self.lats = ne.lat() - sw.lat();
                  memberobj.members[memberobj.varname] = [];
                  for (var i=0;i<(fpm.length < fp.numpins ? fpm.length : fp.numpins);i++) {
                   memberobj.members[memberobj.varname][i] = {
                     f:'0',
                     p:'',
                     o:'fail',
                     lu:'fail',
                     s:'2',
                     h:fpm[i].h,
                     u:fpm[i].p,
                     a:fpm[i].a,
                     y:(sw.lat() + lats * Math.random()),
                     x:(sw.lng() + lngs * Math.random()),
                     z:''
                   }
                  }
                }
                for (var i=0; i<mt.length; i++) {
                  mt[i].getMinimumResolution = function() {return 11;}
                  mt[i].getMaximumResolution = function() {return 11;}
                }
                self.icon = {};
                icon['complex'] = new GIcon();
                icon['complex'].image = GRAPHICS_URL + '/geodensity/spacer.gif';
                icon['complex'].shadow = GRAPHICS_URL + '/geodensity/med_shw.png';
                icon['complex'].iconSize = new GSize(47, 72);
                icon['complex'].shadowSize = new GSize(96, 72);
                icon['complex'].iconAnchor = new GPoint(2,60);
                icon['simple'] = new GIcon();
                icon['simple'].image = GRAPHICS_URL + '/geodensity/small_icon.png';
                icon['simple'].shadow = GRAPHICS_URL + '/geodensity/small_shw.png';
                icon['simple'].iconSize = new GSize(35, 30);
                icon['simple'].shadowSize = new GSize(35, 30);
                icon['simple'].iconAnchor = new GPoint(6, 20);
                icon['simple'].infoWindowAnchor = new GPoint(5, 1);
                self.marker = {};
                for (var opt in memberobj['members']) {
                  markerOptions = (icon[opt]) ? {icon:icon[opt]} : {icon:icon['simple']};
                  marker[opt] = [];
                  var members = memberobj['members'][opt]
                  for (var i = 0; i < members.length; i++) {
                    var point = new GLatLng(members[i].y,members[i].x);
                    marker[opt][i] = new GMarker(point,markerOptions);
                    marker[opt][i].memberIndex = i;
                    map.addOverlay(marker[opt][i]);
                    if (opt == 'complex') {
                      var tooltip = xml_xslt_transform(string_to_xml("<point><u>"+members[i].u+"</u><i>"+i+"</i><n>"+opt+"</n><f>"+members[i].f+"</f><p>"+members[i].p+"</p><lu><![CDATA["+members[i].lu+"]]></lu><o>"+members[i].o+"</o></point>"),xtemp);                      document.getElementById("map").appendChild(tooltip);
                      var point=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(),map.getZoom());
                      var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker[opt][i].getPoint(),map.getZoom());
                      var anchor=marker[opt][i].getIcon().iconAnchor;
                      var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - point.x - anchor.x , - offset.y + point.y - 10)); 
                      pos.apply(tooltip);
                    }
                    if (opt == 'simple') {
                      var tooltip = xml_xslt_transform(string_to_xml("<point><u>"+members[i].u+"</u><i>"+i+"</i><n>"+opt+"</n><f>"+members[i].f+"</f><p>"+members[i].p+"</p><lu><![CDATA["+members[i].lu+"]]></lu><o>"+members[i].o+"</o></point>"),xtemp);                      document.getElementById("map").appendChild(tooltip);
                      var point=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(),map.getZoom());
                      var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker[opt][i].getPoint(),map.getZoom());
                      var anchor=marker[opt][i].getIcon().iconAnchor;
                      var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - point.x - anchor.x , - offset.y + point.y - 10)); 
                      pos.apply(tooltip);
                    }                    
                  }
                }
              }
              rotate();
            }
            self.rotate = function () {
              if (document.getElementById('piclist') && memberobj['members']['complex'].length > 3) {
                self.curpic = (self.curpic) ? curpic : 0;
                document.getElementById('piclist').innerHTML = ''
                for (var i=0;i<4;i++) {
                  curpic = (curpic >= (memberobj['members']['complex'].length-1)) ? 0 : curpic + 1
                  document.getElementById('piclist').appendChild(xml_xslt_transform(string_to_xml("<pic><u>"+memberobj['members']['complex'][curpic].u+"</u><h>"+memberobj['members']['complex'][curpic].h+"</h><z>"+memberobj['members']['complex'][curpic].z+"</z><a>"+memberobj['members']['complex'][curpic].a+"</a><f>"+memberobj['members']['complex'][curpic].f+"</f><p>"+memberobj['members']['complex'][curpic].p+"</p><lu><![CDATA["+memberobj['members']['complex'][curpic].lu+"]]></lu><o>"+memberobj['members']['complex'][curpic].o+"</o></pic>"),xtemp))
                }
                self.rotatetimeout = window.setTimeout("rotate()",10000);
              }
            }
          //]]>
