    //<![CDATA[
function domRollover() {
  if (navigator.userAgent.match(/Opera (\S+)/)) {
    var operaVersion = parseInt(navigator.userAgent.match(/Opera (\S+)/)[1]);
  }
  if (!document.getElementById||operaVersion <7) return;
  var imgarr=document.getElementsByTagName('img');
  var imgPreload=new Array();
  var imgSrc=new Array();
  var imgClass=new Array();
  for (i=0;i<imgarr.length;i++){
    if (imgarr[i].className.indexOf('domroll')!=-1){
      imgSrc[i]=imgarr[i].getAttribute('src');
      imgClass[i]=imgarr[i].className;
      imgPreload[i]=new Image();
      if (imgClass[i].match(/domroll (\S+)/)) {
        imgPreload[i].src = imgClass[i].match(/domroll (\S+)/)[1]
      }
      imgarr[i].setAttribute('xsrc', imgSrc[i]);
      imgarr[i].onmouseover=function(){
        this.setAttribute('src',this.className.match(/domroll (\S+)/)[1])
      }
      imgarr[i].onmouseout=function(){
        this.setAttribute('src',this.getAttribute('xsrc'))
      }
    }
  }
}

    if (GBrowserIsCompatible()) {
      var gmarkers = [];
			var menuitems = [];
			var smallradius = [];
			var largeradius = [];
      var gAreas = [];
      var gCategories = [];
      var gicons = [];
			var linkstate = [];
			var centerpoint = new GLatLng('30.405452','-97.739868');
			var startzoom = 10;
			

			// Create a base icon for all of our markers that specifies the
			// shadow, icon dimensions, etc.
			var wsIcon = new GIcon();
					wsIcon.shadow = "images/wsShadow.png";
					wsIcon.iconSize = new GSize(40, 40);
					wsIcon.shadowSize = new GSize(40, 40);
					wsIcon.iconAnchor = new GPoint(0, 0);
					wsIcon.infoWindowAnchor = new GPoint(15, 0);
					wsIcon.infoShadowAnchor = new GPoint(18, 25);

			var schoolIcon = new GIcon();
					schoolIcon.shadow = "images/schoolShadow.png";
					schoolIcon.iconSize = new GSize(40, 40);
          schoolIcon.shadowSize = new GSize(40, 40);
          schoolIcon.iconAnchor = new GPoint(0, 0);
          schoolIcon.infoWindowAnchor = new GPoint(15, 0);
          schoolIcon.infoShadowAnchor = new GPoint(18, 25);

			var employerIcon = new GIcon();
					employerIcon.shadow = "images/employerShadow.png";
					employerIcon.iconSize = new GSize(40, 40);
          employerIcon.shadowSize = new GSize(40, 40);
          employerIcon.iconAnchor = new GPoint(0, 0);
          employerIcon.infoWindowAnchor = new GPoint(15, 0);
          employerIcon.infoShadowAnchor = new GPoint(18, 25);

			var shoppingIcon = new GIcon();
					shoppingIcon.shadow = "images/shoppingShadow.png";
					shoppingIcon.iconSize = new GSize(40, 40);
          shoppingIcon.shadowSize = new GSize(40, 40);
          shoppingIcon.iconAnchor = new GPoint(0, 0);
          shoppingIcon.infoWindowAnchor = new GPoint(15, 0);
          shoppingIcon.infoShadowAnchor = new GPoint(18, 25);

			var medicalIcon = new GIcon();
					medicalIcon.shadow = "images/medicalShadow.png";
					medicalIcon.iconSize = new GSize(40, 40);
          medicalIcon.shadowSize = new GSize(40, 40);
          medicalIcon.iconAnchor = new GPoint(0, 0);
          medicalIcon.infoWindowAnchor = new GPoint(15, 0);
          medicalIcon.infoShadowAnchor = new GPoint(18, 25);


      gicons["schools"] = new GIcon(schoolIcon,"images/school.png");
			gicons["medical"] = new GIcon(medicalIcon, "images/medical.png");
      gicons["shopping"] = new GIcon(shoppingIcon,"images/shopping.png");
      gicons["employer"] = new GIcon(employerIcon,"images/employer.png");
			gicons["exRes"] = new GIcon(wsIcon,"images/exRes.png");
			gicons["exOffice"] = new GIcon(wsIcon,"images/exOffice.png");
			gicons["exRetail"] = new GIcon(wsIcon,"images/exRetail.png");
      gicons["planRes"] = new GIcon(wsIcon,"images/planRes.png");
			gicons["planRetail"] = new GIcon(wsIcon,"images/planRetail.png");
			gicons["planOffice"] = new GIcon(wsIcon,"images/planOffice.png");
			

      // A function to create the marker and set up the event window
      function createMarker(point,name,html,category,mylink) {
        var marker = new GMarker(point,gicons[category]);
        // === Store the category and name info as a marker properties ===
        marker.mycategory = category;                                 
        marker.myname = name;
        GEvent.addListener(marker, "click", function() { top.location=mylink; });
        GEvent.addListener(marker, "mouseover", function() { 
					marker.openInfoWindowHtml(html); 
				});
        gmarkers.push(marker);
        return marker;
      }
			function createMenuItem(cat,imgOn,imgOff) {
				var menuitem = new Object;
				menuitem.selected = 'false';
				menuitem.cat = cat;
				menuitem.imgOn = imgOn;
				menuitem.imgOff = imgOff;
			  menuitems.push(menuitem);
				return menuitem;	
			}
			function mapMenu() {
				var html = "";
				for (var i=0; i<menuitems.length; i++) {
					if (menuitems[i].selected == 'true') {
						imgOn = menuitems[i].imgOff;
						imgOff = menuitems[i].imgOff;
					} else {
						imgOn = menuitems[i].imgOn;
						imgOff = menuitems[i].imgOff;
					}
						html += '<a href="#" onclick="makeAreas(\''+i+'\')"><img src="'+imgOn+
						'" class="domroll '+imgOff+'" /></a>\n';
				}
				//alert(html);
        document.getElementById("mapMenu").innerHTML = html;
				domRollover();
			}
			function createRadius(point,name,size) {
				if(size == 'small') { 
			  	var myradius = new EInsert(point, "images/smradius.png", new GSize(424,416), 14)
				} else {
			  	var myradius = new EInsert(point, "images/lgradius.png", new GSize(633,611), 13)
				}
				myradius.point = point
				myradius.name = name
				if(size == 'small') {
					smallradius.push(myradius)
				} else {
					largeradius.push(myradius)
				}
				return myradius;
			}
			function createArea(point,name,zoom,cat) {
				var area = new Object;
				area.point = point;
				area.name = name;
				area.zoom = zoom;
				area.cat  = cat;
				//alert("point: "+area.point+"\nName: "+area.name);
				gAreas.push(area);
				return area;
			}
			function createCat(name, desc) {
				var cat = new Object;
				cat.name = name;
				cat.desc = desc;
				gCategories.push(cat);
				return cat;
			}

			function showradius(id,size) {
					if(size == 'small') {
							smallradius[id].show();
					} else {
							largeradius[id].show();
					}
						linkstate[id] = 'on';
			}
			function hideradius(id,size) {
					if (size == 'small') {
						smallradius[id].hide();
					} else {
						largeradius[id].hide();
					}
						linkstate[id] = 'off';
			}
      // == shows all markers of a particular category, and ensures the checkbox is checked ==
      function show(category) {
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].mycategory == category) {
            gmarkers[i].show();
						//radius[i].show();
          }
        }
        // == check the checkbox ==
				if(document.getElementById(category+"box")) {
        	document.getElementById(category+"box").checked = true;
				}
				linkstate[category] = "on";
      }

      // == hides all markers of a particular category, and ensures the checkbox is cleared ==
      function hide(category) {
        for (var i=0; i<gmarkers.length; i++) {
          if (gmarkers[i].mycategory == category) {
            gmarkers[i].hide();
          }
        }
        // == clear the checkbox ==
				if(document.getElementById(category+"box")) {
        	document.getElementById(category+"box").checked = false;
				}
				linkstate[category] = "off";
        // == close the info window, in case its open on a marker that we just hid
        map.closeInfoWindow();
      }

      // == a checkbox has been clicked ==
      function boxclick(box,category) {
        if (box.checked) {
					//linkstate[category] = "off";
          show(category);
					document.getElementById(category+"box").checked = false;
        } else {
          hide(category);
        }
        // == rebuild the side bar
        //makeSidebar();
      }
			function radiustoggle(elementid,id) {
				if(linkstate[id] == 'on') {
					//elementid.checked = false;
					elementid.setAttribute('src','images/radio-unchecked.jpg');
					hideradius(id,'small');
					hideradius(id,'large');
				} else {
					//elementid.checked = true;
					elementid.setAttribute('src','images/radio-checked.jpg');
					if (map.getZoom() == 13) {
						showradius(id,'large');	
					} else if (map.getZoom() == 14) {
						showradius(id,'small');	
					} else {
						//elementid.checked = false;
						elementid.setAttribute('src','images/radio-unchecked.jpg');
					}
				}
			}
			function toggle(elementid,category) {
				if(linkstate[category]== "on") {
					//document.getElementById(category+"box").checked = false;
					document.getElementById(category+"box").setAttribute('src','images/radio-unchecked.jpg');
					hide(category);
					//alert("linkstate: " + linkstate[category]+"\ncategory: "+category);
					//linkstate[category] = "off";
        	//makeSidebar();
				} else {
					//document.getElementById(category+"box").checked = true;
					document.getElementById(category+"box").setAttribute('src','images/radio-checked.jpg');
					show(category);
					//alert("linkstate: " + linkstate[category]+"\ncategory: "+category);
					//linkstate[category] = "on";
        	//makeSidebar();
				}
			}

      function myclick(i) {
        GEvent.trigger(gmarkers[i],"click");
      }

      function zoomclick(i,cat) {
				hide(cat);
				for (var c=0; c<gCategories.length; c++) { hide(gCategories[c].name); }
				if (gAreas[i].zoom != map.getZoom()) { map.setZoom(gAreas[i].zoom); }
        map.panTo(gAreas[i].point);
				var html = "";
				var radiusnum = 0;
        for (var c=0; c<gAreas.length; c++) {
            if (gAreas[c].cat == cat) {
							if (c == i) {
								for (cc=0; cc < gmarkers.length; cc++) {
									if (gmarkers[cc].myname == gAreas[i].name) { gmarkers[cc].show(); }
									else { gmarkers[cc].hide(); }
								}
								for (ri=0; ri < smallradius.length; ri++) {
									if (smallradius[ri].name == gAreas[i].name) { radiusnum = ri; }
								}
              	html += '<a href="javascript:zoomclick(' + c + ',\''+cat+'\')"><b> - ' + gAreas[c].name + '</b></a><br>';
								//html+='&nbsp; - Executive Summary <br>\n';
								//html+='&nbsp; - Photos  <br>\n';
								//html+='&nbsp; - Interactive Map <br>\n';
								html+='&nbsp; <img onclick="radiustoggle(this,'+ radiusnum + 
								');" src="images/radio-unchecked.jpg" /> 1-2-3 Mile View<br>\n';
								//html+='&nbsp; <input type=radio id=radius onclick=\"radiustoggle(this,'+ radiusnum +
								//');\" />1-2-3 Mile View<br>\n';
        				for (var ii=0; ii<gCategories.length; ii++) {
									if (gCategories[ii].name == 'schools') {
          					html += "&nbsp; <img src=\"images/radio-checked.jpg\" id=\"" 
									} else {
          					html += "&nbsp; <img src=\"images/radio-unchecked.jpg\" id=\"" 
									}
									html += gCategories[ii].name + "box\" onclick=\"toggle(this,\'" +
                  gCategories[ii].name + "\');\" />" + gCategories[ii].desc + "<br />\n";

/*
          				html += "&nbsp; <input type=\"radio\" id=\"" + gCategories[ii].name + 
									"box\" onclick=\"toggle(this,\'" +
                  gCategories[ii].name + "\');\" />" + gCategories[ii].desc + "<br />\n";
*/
        				}
								html+='<br><font color=#6A8E82>Toggle the buttons above to show Area Amenities</font><br>&nbsp;<br>\n';
								//html+='&nbsp; - Printable Brochure <br>\n';
								//html+='&nbsp; - Available Properties <br>\n';
							} else {
              	html += '<a href="javascript:zoomclick(' + c + ',\''+cat+'\')"> - ' + gAreas[c].name + '</a><br>';
							}
            }
        }
				//alert(html);
        document.getElementById("mapArea").innerHTML = html;
				show("schools");
				//show("medical");
				//show("employer");
				//show("shopping");
			}


      // == rebuilds the sidebar to match the markers currently displayed ==
      function makeSidebar() {
        var html = "";
        for (var i=0; i<gmarkers.length; i++) {
          if (!gmarkers[i].isHidden()) {
            html += '<a href="javascript:zoomclick(' + i + ',\''+ gmarkers[i].mycategory +'\')">' + gmarkers[i].myname + '</a><br>';
          }
        }
        document.getElementById("side_bar").innerHTML = html;
      }

      function makeAreas(num) {
				for (var i=0; i<menuitems.length; i++) { menuitems[i].selected = 'false'; }
				menuitems[num].selected = 'true'
				mapMenu();
				for (var ii=0; ii<gCategories.length; ii++) { hide(gCategories[ii].name); }
				map.setZoom(startzoom);
				map.panTo(centerpoint);
        var html = "";
        for (var i=0; i<gAreas.length; i++) {
						hide(gAreas[i].cat); 
						//alert(gAreas[i].cat);
						if (gAreas[i].cat == menuitems[num].cat) {
            	html += '<a href="javascript:zoomclick(' + i + ',\''+menuitems[num].cat+'\')"> - ' + gAreas[i].name + '</a><br>';
						}
				show(menuitems[num].cat)
        }
				//alert(html);
        document.getElementById("mapArea").innerHTML = html;
				
      }
			function makeCategories() {
				var html = "";
        for (var i=0; i<gCategories.length; i++) {
					//html += "<input type=radio id=" + gCategories[i].name + "box ";
					code = "<input type=\"radio\" id=\"" + gCategories[i].name + "box\" onclick=\"toggle(this,\'" + 
									gCategories[i].name + "\');\" />" + gCategories[i].desc + "<br />\n";
					//alert(code);
					html += code;
				}
				//alert(html);
				document.getElementById("mapIcons").innerHTML = html;
				//document.getElementById("mapIcons").style.visibility="hidden";
			}
			function hideCategories() {
				for (var i=0; i<gCategories.length; i++) { hide(gCategories[i].name); }
			}

      // create the map
      var map = new GMap2(document.getElementById("map"));
			GEvent.addListener(map, "singlerightclick", function(point, src, overlay) {
			  var myHtml = "Point Lat, Lng: " + map.fromContainerPixelToLatLng(point) + "\n<br>Zoom Level: " + 
				map.getZoom() + "\n<br>Center: " + map.getCenter();
  			map.openInfoWindow(map.fromContainerPixelToLatLng(point), myHtml);
			});
      map.addControl(new GLargeMapControl());
			map.addControl(new GScaleControl());
      map.addControl(new GMapTypeControl());
			map.addMapType(G_PHYSICAL_MAP);
			map.removeMapType(G_SATELLITE_MAP);
			map.setCenter(centerpoint, startzoom, G_PHYSICAL_MAP);


      // Read the data
			GDownloadUrl("code/categories.xml", function(doc) {
				var xmlDoc = GXml.parse(doc);
				var categories = xmlDoc.documentElement.getElementsByTagName("category");
				for (var i = 0; i < categories.length; i++) {
					var name = categories[i].getAttribute("name");
					var desc = categories[i].getAttribute("desc");
					//alert(name+desc);
					var cat = createCat(name,desc);
				}
				//alert(gCategories[1].name);
				//makeCategories();
			});
			GDownloadUrl("code/areas.xml", function(doc) {
				var xmlDoc = GXml.parse(doc);
				var areas = xmlDoc.documentElement.getElementsByTagName("area");
				for (var i = 0; i < areas.length; i++) {
					var name = areas[i].getAttribute("name");
					var lat = parseFloat(areas[i].getAttribute("lat"));
					var lng = parseFloat(areas[i].getAttribute("lng"));
          var point = new GLatLng(lat,lng);
					var cat = areas[i].getAttribute("category");
					var zoom = parseInt(areas[i].getAttribute("zoom"));
					//alert("lat: "+lat+"\nlng: "+lng+"\npoint: "+point+"\nname: "+name);
					var area = createArea(point, name, zoom, cat);
				}
				var menus = xmlDoc.documentElement.getElementsByTagName("menuitem");
				for (var i=0; i< menus.length; i++) {
					var menucat = menus[i].getAttribute("cat");
					var imgOff   = menus[i].getAttribute("imgOff");
					var imgOn   = menus[i].getAttribute("imgOn");
					var menuItem = createMenuItem(menucat,imgOn,imgOff);
				}
				makeAreas(0);
			});
      GDownloadUrl("code/markers.xml", function(doc) {
        var xmlDoc = GXml.parse(doc);
        var markers = xmlDoc.documentElement.getElementsByTagName("marker");
          
        for (var i = 0; i < markers.length; i++) {
          // obtain the attribues of each marker
          var lat = parseFloat(markers[i].getAttribute("lat"));
          var lng = parseFloat(markers[i].getAttribute("lng"));
          var point = new GLatLng(lat,lng);
					var lgpoint = new GLatLng(lat - .0020,lng + .0025);
					var smpoint = new GLatLng(lat - .0010,lng + .0015);
          var address = markers[i].getAttribute("address");
          var name = markers[i].getAttribute("name");
					var mylink = markers[i].getAttribute("link");
					var linktext = markers[i].getAttribute("linktext");
          var html = "<div align=center> <b>"+name+"</b><br>"+address+"<br><a href=\""+mylink+"\">"+linktext+"</a></div>";
          var category = markers[i].getAttribute("category");
          // create the marker
          var marker = createMarker(point,name,html,category,mylink);
					var smradius = createRadius(smpoint,name,'small');
					var lgradius = createRadius(lgpoint,name,'large');
					map.addOverlay(smradius);
					map.addOverlay(lgradius);
					smallradius[i].hide();
					largeradius[i].hide();
          map.addOverlay(marker);
        }

        // == show or hide the categories initially ==
				//hideCategories();
				for (var i=0; i<gCategories.length; i++) { hide(gCategories[i].name); }
				show("exRes");
				show('planRes');
				show('exRetail');
				show('planRetail');
				show('exOffice');
				show('planOffice');
        //  == create the initial sidebar ==
    		//    makeSidebar(); 
      });
    }

    else {
      alert("Sorry, the Google Maps API is not compatible with this browser");
    }
    // This Javascript is based on code provided by the
    // Blackpool Community Church Javascript Team
    // http://www.commchurch.freeserve.co.uk   
    // http://econym.googlepages.com/index.htm

    //]]>
