    var map;
    var markers = [];
    var infoWindow;
    var locationSelect;

function fixMapDimensions() {
		// alert('fixMapDimensions()');
		var width = document.body.clientWidth;
		var height = document.body.clientHeight;
		width2 = width - 410;
		height2 = height - 155;
		document.getElementById("map").style.width = "600px";
		document.getElementById("map").style.height = "355px";
		document.getElementById("locationSelect").style.height = "355px";
		// document.getElementById("locationSelect").style.height = height2+"px";
		// width3 = width - 25; 
		// height3 = height - 100;
		// document.getElementById("wrapper").style.height =  "250px";
		// document.getElementById("wrapper").style.width =  width3 + "px";
}
		
    function load() {
			// alert('load()');
      map = new google.maps.Map(document.getElementById("map"), {
        center: new google.maps.LatLng(40, -100),
        zoom: 4,
        mapTypeId: 'roadmap',
        mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU}
      });
			var url = String (window.location);
			var re  = url.match(/id\=(\d+)\&*.*$/);
			if ( re == null ) {} else { // if we found a single academy we have to show
    		if ( re[1] != null ) {
              new Ajax.Request('getAcademyDetails.php?id='+re[1], {
                method:'get',
                onSuccess: function(transport){
      					 var json = transport.responseText.evalJSON(); // (40.709256, -74.012059)
      					 var latlng = new google.maps.LatLng(
                      parseFloat(json.academy.lat),
                      parseFloat(json.academy.lng));
      		  		 		  createMarker(latlng, json.academy.title, {add: json.academy.address, dir: 'none', email: 'none', phone: 'none' , typeAcademy: json.academy.theme , hsid: re[1] , recenter: 1});
								 			map.setCenter(latlng);
                 }

              });
    			}
			}
      infoWindow = new google.maps.InfoWindow();

      locationSelect = document.getElementById("locationSelect");
   }

   function searchLocations(val) {
	   // alert('searchLocations('+val+')');
	   if ( val == 1 ) {
		 		document.getElementById("itemizeD").value = 0;
		 } if ( val == 2 ) {
		 	  document.getElementById("itemizeD").value = document.getElementById("itemizeD").value - 2;
		 }

     var address = document.getElementById("addressInput").value;
     var geocoder = new google.maps.Geocoder();

     geocoder.geocode({address: address}, function(results, status) {
       if (status == google.maps.GeocoderStatus.OK) {
        searchLocationsNear(results[0].geometry.location);
       } else {
			 	 if ( address == '' ) {
				 		alert("Please enter in an address");
				 } else {
				 	  alert(address + ' not found');
				 }
       }
     });

   }

   function clearLocations() {
     infoWindow.close();
     /**/
		 for (var i = 0; i < markers.length; i++) {
       markers[i].setMap(null);
     }
     markers.length = 0;

     locationSelect.innerHTML = "";
     var option = document.createElement("option");
     option.value = "none";
     option.innerHTML = "See all results:";
     // locationSelect.appendChild(option);
		 /**/
   }

   function searchLocationsNear(center) {
     clearLocations(); 
	   // var radius = 0;
     var radius = document.getElementById('radiusSelect').value;

		 var themeArray = new Array();
		 var val = 0;
		 if ( document.getElementById("addAOF").checked ) {
		 		themeArray[val] = 4;
				val++;
		 }
		 if ( document.getElementById("addAOIT").checked ) {
		 		themeArray[val] = 3;
				val++;
		 }
		 if ( document.getElementById("addAOHT").checked ) {
		 		themeArray[val] = 2;
				val++;
		 }
		 if ( document.getElementById("addAOE").checked ) {
		 		themeArray[val] = 76;
				val++;
		 }
		 if ( themeArray.length > 0 ) {
		 		var theme = themeArray.join(',');
		 } else {
		 	  var theme = '';
		 }
		 var it = document.getElementById('itemizeD').value;
		 // document.getElementById('itemizeD').innerHTML = '<img src="images/ajax-loader.gif" alt="">';
		 var searchUrl = 'phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius+'&theme='+theme+'&item='+it;
     downloadUrl(searchUrl, function(data) {
       var xml = parseXml(data);
       var markerNodes = xml.documentElement.getElementsByTagName("marker");
       var bounds = new google.maps.LatLngBounds();
			 var nxtNodes = xml.documentElement.getElementsByTagName("nextSet");
			 if ( markerNodes.length == 0 ) {
			 		Modalbox.show('none_found.php' , {title: 'No Academies Found' , width: 600});
					return false;
			 }
       for (var i = 0; i < markerNodes.length; i++) {
			 	 // alert(markerNodes[i].getAttribute("hs_id")+" == "+hs_id);
             var name = markerNodes[i].getAttribute("name");
             var address = markerNodes[i].getAttribute("address");
    				 var academy_id = markerNodes[i].getAttribute("academy_id");
    				 var director = markerNodes[i].getAttribute("director");
    				 var hs_id = markerNodes[i].getAttribute("hs_id");
    				 var hs_name = markerNodes[i].getAttribute("hs_name");
             var distance = parseFloat(markerNodes[i].getAttribute("distance"));
    				 var ph = markerNodes[i].getAttribute("phone");
    				 var e_mail = markerNodes[i].getAttribute("email");
						 var typeAcademy = markerNodes[i].getAttribute("academy_type");

             var latlng = new google.maps.LatLng(
                  parseFloat(markerNodes[i].getAttribute("lat")),
                  parseFloat(markerNodes[i].getAttribute("lng")));
             createOption({academy_id: academy_id, n: name, l: latlng, num: i, d: director, add: address , typeAcademy: typeAcademy});
    				 // alert(latlng);
             createMarker(latlng, name, {add: address, dir: director, email: e_mail, phone: ph , typeAcademy: typeAcademy , hsid: academy_id });
             bounds.extend(latlng);
       } // end for loop

			 for ( var i = 0 ; i < nxtNodes.length; i++ ) {
					 createNext ( nxtNodes[i].getAttribute("val") );
			 }
			 if ( nxtNodes.length == 0 ) {
			 		 if ( document.getElementById("itemizeD").value > 0 ) {
					 		createPrev(document.getElementById("itemizeD").value);
					 }
			 }
       map.fitBounds(bounds);
       locationSelect.style.visibility = "visible";
      });

    }

    function createPrev (val) {
		  // alert('function createPrev: ' + val);
			val++;
		  var option = document.createElement("div");
			option.className = "academyBox";
			document.getElementById('itemizeD').value = val;
			var str = '';
			if ( val > 0 ) {
				 var val2 = val - 1;
				 if ( val2 > 0 ) {
				 		str = "<img src=\"images/icons/famfam/silk/arrow_left.png\" class=al /> <a href=\"#\" onclick=\"searchLocations(2);return false;\">Previous 20 Academies</a> ";
				 } 
			}
			option.innerHTML = str;
			locationSelect.appendChild(option);
    }
		
    function createNext (val) {
		  var option = document.createElement("div");
			option.className = "academyBox";
			document.getElementById('itemizeD').value = val;
			var str = '';
			if ( val > 0 ) {
				 var val2 = val - 1;
				 if ( val2 > 0 ) {
				 		str = "<img src=\"images/icons/famfam/silk/arrow_left.png\" class=al /> <a href=\"#\" onclick=\"searchLocations(2);return false;\">Previous 20 Academies</a> ";
				 } 
			}
			str += "<a href=\"#\" onclick=\"searchLocations(0);return false;\">Next 20 Academies</a> <img src=\"images/icons/famfam/silk/arrow_right.png\" class=al />";
			option.innerHTML = str;
			locationSelect.appendChild(option);
    }

		
    function createMarker(latlng, name, additional) {
			// alert(additional.add);
			var newAddress = additional.add.replace(/<br>/, ' ');
			var html = "<b>"+name+"</b><br>"+additional.typeAcademy+"<br>"+additional.add+"<br><a href=\"/map/form_modal.php?id="+additional.hsid+"\" onclick=\"Modalbox.show(this.href, {title: 'Contact this Academy' , width: 600});return false;\">Contact this Academy</a> | <a target=\"_body\" href=\"http://maps.google.com/maps?f=d&source=s_d&daddr="+newAddress+"\">Directions</a><br><br>";
			var marker = new google.maps.Marker ( { map: map, position: latlng , title:name } );
      google.maps.event.addListener(marker, 'click', function() {
        /**/
				infoWindow.setContent(html);
        infoWindow.open(map, marker);
				/**/
      });
      markers.push(marker);
    }

    function createOption(opts) {
		  var option = document.createElement("div");
			option.onmouseover=function(){this.style.background='#cccccc'; google.maps.event.trigger(markers[opts.num],'mouseover');return false;};
			option.onmouseout=function(){this.style.background='#eeeeee';}
			option.className = "academyBox";
			option.id = opts.num;
			var str = opts.n;
			// str += "<br />" + director;
			var newAddress = opts.add.replace(/<br>/, ' ');
			option.innerHTML = "<span style='font-weight: bold; font-size:14px;'></span> <a href=\"#\" onclick=\"google.maps.event.trigger(markers["+opts.num+"], 'click');return false;\">"+str+"</a><br>"+opts.typeAcademy+"<br>"+opts.add+"<br><br><img src=\"/map/images/icons/famfam/silk/email.png\" class=\"al\"> <a href=\"/map/form_modal.php?id="+opts.academy_id+"\" onclick=\"Modalbox.show(this.href, {title: 'Contact "+str+" Academy ' , width: 600});return false;\">Contact this Academy</a> | <a target=\"_body\" href=\"http://maps.google.com/maps?f=d&source=s_d&daddr="+newAddress+"\">Directions</a><br><br>";
			/* distinct link 
			<img class=\"al\" src=\"/map/images/icons/famfam/silk/link.png\"> <a onclick=\"Modalbox.show(this.href, {title: 'Link Directly to "+str+" ' , width: 600});return false;\" href=\"getDirectLink.php?id="+opts.academy_id+"\">Share this Location</a>";
			*/
			locationSelect.appendChild(option);
    }

    function downloadUrl(url, callback) {
      var request = window.ActiveXObject ?
          new ActiveXObject('Microsoft.XMLHTTP') :
          new XMLHttpRequest;

      request.onreadystatechange = function() {
        if (request.readyState == 4) {
          request.onreadystatechange = doNothing;
          callback(request.responseText, request.status);
        }
      };

      request.open('GET', url, true);
      request.send(null);
    }

    function parseXml(str) {
      if (window.ActiveXObject) {
        var doc = new ActiveXObject('Microsoft.XMLDOM');
        doc.loadXML(str);
        return doc;
      } else if (window.DOMParser) {
        return (new DOMParser).parseFromString(str, 'text/xml');
      }
    }

    function doNothing() {}


