    //<![CDATA[

 	
	var mgr1;
 	var mgr2;
 	var mgr3;
 	var mgr4;
 	var mgr5;
 	var mgr6;
 	var mgr7;
 	var mgr8;
	var icons = {}; 
	var allmarkers = [];
	var map;
	var handler_all;
	var handler_single;
	var handler_clustered;
	
	var currentMarker;
	var clickOn = 0;
	var CurrentID;
 

 
    function load() {
        if (GBrowserIsCompatible()) {
				  map = new GMap2(document.getElementById("map_canvas"));
				  map.setCenter(new GLatLng(38.675, -121.145), 13);
				  map.addControl(new GSmallMapControl());
				  map.enableDoubleClickZoom();
			
				    //var newIcon =G_DEFAULT_ICON;
					   //var newIcon = MapIconMaker.createMarkerIcon({width: 20, height: 31, primaryColor: '#0000FF'});     
				  //var newIcon = getIcon('shop11.png');
				  //load_marker_set(shoppingMarkers, ishoppingMarkers, newIcon, mgr1);
			
				   //load_marker_set(shoppingMarkers, ishoppingMarkers, newIcon, mgr1);
					mgr1 = new MarkerManager(map, false);
					load_marker_set(diningMarkers, idiningMarkers,  mgr1, 'dining');
					//toggleDining();

//var newIcon2 = MapIconMaker.createMarkerIcon({width: 35, height: 60, primaryColor: "#0000FF", imageUrl: "pin_dining.png"});     
					mgr2 = new MarkerManager(map, false);
					load_marker_set(serviceMarkers, iserviceMarkers,  mgr2, 'services');
					toggleServices();
			
					//var newIcon3 = MapIconMaker.createMarkerIcon({width: 35, height: 60, primaryColor: "#0000FF", imageUrl: "pin_services.png"});     
					mgr3 = new MarkerManager(map, false);
					load_marker_set(shoppingMarkers, ishoppingMarkers,  mgr3, 'shopping');
					toggleShopping();
			
					//var newIcon4 = MapIconMaker.createMarkerIcon({width: 35, height: 60, primaryColor: "#0000FF", imageUrl: "pin_sales.png"});     
					mgr4 = new MarkerManager(map, false);
					load_marker_set(salesMarkers, isalesMarkers,  mgr4, 'sales');
					toggleSales();
			
					//var newIcon5 = MapIconMaker.createMarkerIcon({width: 35, height: 60, primaryColor: "#0000FF", imageUrl: "pin_arts.png"});     
					mgr5 = new MarkerManager(map, false);
					load_marker_set(artsMarkers, iartsMarkers,  mgr5, 'arts');
					toggleArts();
			
					//var newIcon6 = MapIconMaker.createMarkerIcon({width: 35, height: 60, primaryColor: "#0000FF", imageUrl: "pin_sports.png"});     
					mgr6 = new MarkerManager(map, false);
					load_marker_set(sportsMarkers, isportsMarkers,  mgr6, 'sports');
					toggleSports();
			
			//var newIcon7 = MapIconMaker.createMarkerIcon({width: 35, height: 60, primaryColor: "#0000FF", imageUrl: "pin_kids.png"});     
					mgr7 = new MarkerManager(map, false);
					load_marker_set(kidsMarkers, ikidsMarkers, mgr7, 'kids');
					toggleKids();
			
			//var newIcon8 = MapIconMaker.createMarkerIcon({width: 35, height: 60, primaryColor: "#0000FF", imageUrl: "pin_poi.png"});     
					mgr8 = new MarkerManager(map, false);
					load_marker_set(POIMarkers, iPOIMarkers,  mgr8, 'poi');
					togglePOIs();
					
	}else{
	  // display a warning if the browser was not compatible
      alert("Sorry, the Google Maps API is not compatible with this browser");
    }

}
	
  
  function toggleShopping() {
  	 		//shopping
			mgr3.refresh();
			mgr3.toggle();
			if (mgr3.isHidden()){
				document.images["shoppingbtn"].src= "images/shoppingbtn_f3.gif";
			} else {
				document.images["shoppingbtn"].src= "images/shoppingbtn.gif";
			}
  }
  
            
  function toggleDining() {
   	 		//dining
			mgr1.refresh();
			mgr1.toggle();
			if (mgr1.isHidden()){
				document.images["diningbtn"].src= "images/diningbtn_f3.gif";
			} else {
				document.images["diningbtn"].src= "images/diningbtn.gif";
			}
  }
  function toggleServices() {
	  		mgr2.refresh();
			mgr2.toggle();
			if (mgr2.isHidden()){
				document.images["servicebtn"].src= "images/servicebtn_f3.gif";
			} else {
				document.images["servicebtn"].src= "images/servicebtn.gif";
			}
}
  function toggleSales() {
			mgr4.toggle();
			if (mgr4.isHidden()){
				document.images["salesbtn"].src= "images/salesbtn_f3.gif";
			} else {
				document.images["salesbtn"].src= "images/salesbtn.gif";
			}
}
  function toggleArts() {
			mgr5.toggle();
			if (mgr5.isHidden()){
				document.images["artbtn"].src= "images/artbtn_f3.gif";
			} else {
				document.images["artbtn"].src= "images/artbtn.gif";
			}
}
  function toggleSports() {
			mgr6.refresh();
			mgr6.toggle();
			if (mgr6.isHidden()){
				document.images["sportsbtn"].src= "images/sportsbtn_f3.gif";
			} else {
				document.images["sportsbtn"].src= "images/sportsbtn.gif";
			}
}
  function toggleKids() {
			mgr7.toggle();
			if (mgr7.isHidden()){
				document.images["kidsbtn"].src= "images/kidsbtn_f3.gif";
			} else {
				document.images["kidsbtn"].src= "images/kidsbtn.gif";
			}
}
  function togglePOIs() {
			mgr8.toggle();
			if (mgr8.isHidden()){
				document.images["poibtn"].src= "images/poibtn_f3.gif";
			} else {
				document.images["poibtn"].src= "images/poibtn.gif";
			}
}
	
	
		function load_marker_set(markerSource, imarkerSource, mgr, category){
     	var locations = [];
		for (var i = 0; i < imarkerSource; i++) {
		  var MarkerItem = markerSource[i];
          newIcon = MapIconMaker.createMarkerIcon({width: MarkerItem.iconwidth, height: MarkerItem.iconheight, primaryColor: "#0000FF", imageUrl: MarkerItem.icon});     
		  var name = MarkerItem.name;
          var address = MarkerItem.address;
          var latlng = MarkerItem.latlng;
          var type = MarkerItem.type;
		  var arrayId = MarkerItem.arrayId;
		  if (searchType =='Alphabet'){
		  		var mapID = MarkerItem.mapID;
		  }else{
		  		var mapID = MarkerItem.mapID + '_' + MarkerItem.categoryId;
		  }
          var store = {latlng: latlng, name: name, address: address, type: type, icon: newIcon, mapID: mapID, arrayId: arrayId};

		//var latlngHash = (latlng.lat().toFixed(6) + "" + latlng.lng().toFixed(6));
          //latlngHash = latlngHash.replace(".","").replace(".", "").replace("-","");	  
        if (locations[i] == null) {
            locations[i] = []
          }
          locations[i].push(store);
       }

		var singleMarkers = new Array;
	   	var clusteredMarkers = new Array;
	   	var allMarkers = new Array;
		allMarkers=locations.slice();

		//alert('singleMarkers-0:' + singleMarkers.length);
		//alert('locations-0:' + locations.length);
		//alert('clusteredMarkers:' + clusteredMarkers.length);

	/* Loop until all markers have been compared. */
		  
		for (x=0;x<locations.length;x++) {
			var storeMarkers = locations[x];
			var thisMarker=storeMarkers[0];
			
			var cluster = new Array;
			/* Compare against all markers which are left. */
		   for (y=0;y<locations.length;y++) {
			   	if (x != y) {
					var allTargetMarkers = locations[y];
					var targetMarker=allTargetMarkers[0];
					//new GLatLng()
					pixels = pixelDistance(thisMarker.latlng.lat().toFixed(6), thisMarker.latlng.lng().toFixed(6),targetMarker.latlng.lat().toFixed(6), targetMarker.latlng.lng().toFixed(6),13);
					/* If two markers are closer than given distance remove */
					/* target marker from array and add it to cluster.      */
					var distance = 20;
					if ( distance > pixels) {
						//alert(thisMarker.name + ':' + targetMarker.name);
						locations.splice(y,1); //remove targetMarker
						cluster.push(targetMarker);
					}
				}
			}
	        /* If a marker has been added to cluster, add also the one  */
			/* we were comparing to and remove the original from array. */
			if (cluster.length > 0) {
				cluster.push(thisMarker);
				clusteredMarkers.push(cluster);
				locations.splice(x,1); //remove thisMarker
			} else {
				//storeMarkers.push(targetMarker);
			}

		}
		singleMarkers=locations.slice();
	
		//alert('allMarkers-1:' + allMarkers.length);
		//alert('singleMarkers-1:' + singleMarkers.length);
		//alert('clusteredMarkers-1:' + singleMarkers.length);


		for (h=0;h<allMarkers.length;h++) {
          var storesA = allMarkers[h];
		  var markerA;
		  var markersAAr = [];

 		  markerA=createMarker(storesA,false,mgr);
		  
		  markersAAr.push(markerA);
          allmarkers.push(markerA);
		  mgr.addMarkers(markersAAr,14,18);
		  mgr.show();
		  mgr.refresh();
		 }
		for (j=0;j<singleMarkers.length;j++) {
          var stores = singleMarkers[j];
		  var marker;
		  var markersAr = [];
		  marker=createMarker(stores, true,mgr);
		  
			
		  markersAr.push(marker);
          allmarkers.push(marker);
		  mgr.addMarkers(markersAr,0,13);
		  mgr.show();
		  mgr.refresh();
		 }
		for (k=0;k<clusteredMarkers.length;k++) {
          var storesC = clusteredMarkers[k];
		  var markerC;
		  var markersCAr = [];
		  markerC=createClusteredMarker(storesC,category,true,mgr);
		
		  markersCAr.push(markerC);
          allmarkers.push(markerC);
		  mgr.addMarkers(markersCAr,0,13);
		  mgr.show();
		  mgr.refresh();
		 }
	}
	
	
	



    function createMarker(stores, addListhandlers, mgr) {
      var store = stores[0];
	  var marker = new GMarker(store.latlng, {icon: store.icon});	
       var html = GetHTML_Init() + GetHTML_Location(store.name, store.address) + GetHTML_Directions(store.arrayId);
	  var handler_click = createMarkerClickHandler(store.arrayId);
	  
	  GEvent.addListener(marker, 'click', handler_click);
		if (addListhandlers) {
		  var elementId= 'ad_' + store.mapID 
		  //alert(store.name +': ' + elementId);
		  var objAd_listing = document.getElementById(elementId);
		  var handler_over = createListingMouseOverHandler(marker, objAd_listing, html, mgr, elementId);
		  objAd_listing.onmouseover = handler_over;
		  
		  var handler_out = createListingMouseOutHandler(marker, objAd_listing, mgr,elementId);
		  objAd_listing.onmouseout = handler_out;

		  var handler_clicklisting = createListingClickHandler(marker, objAd_listing, html, mgr, elementId);
		  objAd_listing.onclick = handler_clicklisting;
		}
	  
     // GEvent.addListener(marker, 'click', function() {
     //   marker.openInfoWindowHtml(html);
     // });
      return marker;
    }
 
     function createClusteredMarker(stores, category, addListhandlers,mgr) {
		var thisIconItem = clusteredIcons[category];
		var thisIcon = MapIconMaker.createMarkerIcon({width: thisIconItem.iconwidth, height: thisIconItem.iconheight, primaryColor: "#0000FF", imageUrl: thisIconItem.icon});  
  var marker = new GMarker(stores[0].latlng, {icon: thisIcon});  
		var html_marker = "";
		var html_marker2 = "";
	  
      for (var i = 0; i < stores.length; i++) {
		  html_marker += GetHTML_Location(stores[i].name, stores[i].address);
		  html_marker2 = GetHTMLClustered_Init() + html_marker +  GetHTML_Directions(stores[i].arrayId);
		  
		 var handler_click = createClusteredMarkerClickHandler(html_marker2);

		  GEvent.addListener(marker, 'click', handler_click);

		var html = "";
		  html = GetHTML_Init() + GetHTML_Location(stores[i].name, stores[i].address) + GetHTML_Directions(stores[i].arrayId);
		 
		if (addListhandlers) {
		  var elementId= 'ad_' + stores[i].mapID;
//alert(stores[i].name + ':' + elementId);
		 var objAd_listing = document.getElementById(elementId);
		  var handler_over = createListingMouseOverHandler(marker, objAd_listing, html,mgr,elementId);
		  objAd_listing.onmouseover = handler_over;
		  
		  var handler_out = createListingMouseOutHandler(marker, objAd_listing,mgr,elementId);
		  objAd_listing.onmouseout = handler_out;

		var handler_clicklisting = createListingClickHandler(marker, objAd_listing, html, mgr,elementId );
		  objAd_listing.onclick = handler_clicklisting;
		}

      }
	//  GEvent.addListener(marker, 'click', function() {
		 //   marker.openInfoWindowHtml(html);
    //  });
	  //map.getExtInfoWindow().resize(10);
      return marker;
    }
	
	//cluster code
	var OFFSET=268435456;
	var RADIUS=85445659.4471; /* $offset / pi() */

	function lonToX(lon) {
		var retval = Math.round(OFFSET + RADIUS * lon * Math.PI / 180);  
		return retval;
	}
	
	function latToY(lat) {
		var retval =  Math.round(OFFSET - RADIUS * 
					 Math.log((1 + Math.sin(lat * Math.PI / 180)) / 
					(1 -  Math.sin(lat * Math.PI / 180))) / 2);
		return retval;
	}
	
	function pixelDistance(lat1, lon1, lat2, lon2, zoom) {
		var x1 = lonToX(lon1);
		var y1 = latToY(lat1);
	
		var x2 = lonToX(lon2);
		var y2 = latToY(lat2);
		var retval = Math.sqrt(Math.pow((x1-x2),2) + Math.pow((y1-y2),2)) >> (21 - zoom);
		return retval;
	}


	
	
	
	
	
	function getIcon(image_name) {
      var icon = null;
        if (icons[image_name]) {
          icon = icons[image_name];
        } else {
 		    icon = G_DEFAULT_ICON;
			icon.image = 'images/' + image_name;
  			icon.iconSize = new GSize(43, 71);
          	icons[image_name] = icon;
        }
      return icon;
    }

  
	function createMarkerClickHandler(arrayId) {  
	return function() {
		  var MarkerItem = eval(arrayId);
		  var name = MarkerItem.name;
          var address = MarkerItem.address;

		  var thisHTML = GetHTML_Init() + GetHTML_Location(name, address) + GetHTML_Directions(arrayId);
		  //this.openInfoWindowHtml(thisHTML);
		  this.openExtInfoWindow(
                map,
                "custom_info_window_darkblue",
                thisHTML, {beakOffset:3 ,paddingX:100,paddingY:5} ); 
		
    return false;
  };
}

	function createClusteredMarkerClickHandler(thisHTML) {
	    return function() {
	         //this.openInfoWindowHtml(thisHTML);
			 this.openExtInfoWindow(
                map,
               "custom_info_window_darkblue",
                thisHTML, {beakOffset:3 ,paddingX:60,paddingY:5} ); 
		return false;
	  };
	}
	
	function GetHTMLClustered_Init(){
		var HTMLString = "<div id='map_infoWindowClustered'><div id='map_infoWindowLocation'>";
		
		return HTMLString;
	}
	
	function GetHTML_Init(){
		var HTMLString = "<div id='map_infoWindow'><div id='map_infoWindowLocation'>";
		
		return HTMLString;
	}

	function GetHTML_Location(name, address){
		var HTMLString = "<b>" + name + "</b> <br />" + address + "<br /><br />";
		
		return HTMLString;
	}
	
	function GetHTML_Directions(arrayId){
		var HTMLString = "<a href='javascript:showDirections(" + arrayId + ")'>Get Directions</a></div><div id='map_showfromDirections'>Start Address: <br /><input class='inputfield' type='text' id='fromLocation' /><br /><input class='inputbutton' type='button' id='GetDirectionsBTN' onclick='javascript:GetDirections(" + arrayId + ")' value='Get Directions' /></div></div>";

	
		return HTMLString;
	}
	

	
	// functions that open the directions forms
    function GetDirections(arrayId) {
		 
		  var MarkerItem = eval(arrayId);
          var address = MarkerItem.direction_address;
		  var fromLocationVal = document.getElementById("fromLocation").value;
		  var directionURL = "http://maps.google.com/maps?q=from%3A+" + fromLocationVal + "+to%3A+" + escape(address);
		  window.open(directionURL,"Directions");

//var thisHTML=name;
        //marker.openInfoWindowHtml(thisHTML);
     }
	 
	 

	 
	function showDirections(arrayId){
		
		toggleLayer('map_infoWindow', 'map_showfromDirections','show');
		 map.getExtInfoWindow().resize(60);



		 //var thisMarker = new GMarker();	
		 //thisMarker = mgr.getMarker(38.671626,-121.160778,13);
		 //alert(latLngString);
		 //thisMarker.openInfoWindowHtml(thisHTML);
}
	 function toggleLayer(infobox, whichLayer, state ){  
	 	if (state == "show"){
		 setStyle(whichLayer,'visibility','visible');
		}else{
		 setStyle(whichLayer,'visibility','hidden');
		}
	 }
	 
	 function setStyle(obj,style,value){
		getRef(obj).style[style]= value;
	}
	
	function getRef(obj){
		return (typeof obj == "string") ?
			 document.getElementById(obj) : obj;
	}
	
	
	function createListingMouseOverHandler(marker,  obj, html, mgr, elementId) {  
return function() {
	if(	clickOn == 0) {
		if (mgr.isHidden()){
			map.addOverlay(marker);
		}
		//marker.openInfoWindowHtml(html);
			marker.openExtInfoWindow(
                map,
                "custom_info_window_darkblue",
                html, {beakOffset:3 ,paddingX:60,paddingY:5} 
		        );
		obj.style.backgroundColor = "#fff799";
	}else{
		if ( CurrentID != elementId){
			if (mgr.isHidden()){
				map.addOverlay(marker);
			}
			obj.style.backgroundColor = "#fff799";
		}
			//marker.openInfoWindowHtml(html);
			marker.openExtInfoWindow(
                map,
                "custom_info_window_darkblue",
                html, { beakOffset: 3, paddingX: 60, paddingY: 5 }
		        );
	}
		return false;
	};
}	

	function createListingMouseOutHandler(marker, obj, mgr, elementId) {  
	return function() {
		if(	clickOn == 0) {
			if (mgr.isHidden()){
				map.removeOverlay(marker);
			}
			marker.closeInfoWindow();
			obj.style.backgroundColor = "#ffffff";
		}else{
			if ( CurrentID != elementId){
				if (mgr.isHidden()){
					map.removeOverlay(marker);
				}
				marker.closeInfoWindow();
				obj.style.backgroundColor = "#ffffff";
			}
		}
			return false;
	};
}	

function createListingClickHandler(marker,  obj, html, mgr, elementId) {  
	return function() {
		if (clickOn ==0){
			//turning on
			clickOn = 1;
			//hide any listing marker that shows
			if (mgr.isHidden()){
				map.addOverlay(marker);
				currentMarker = marker
			}
			//marker.openInfoWindowHtml(html);
			marker.openExtInfoWindow(
                map,
                "custom_info_window_darkblue",
                html, { beakOffset: 3, paddingX: 60, paddingY: 5 }
		        );

			//turn off last clicked Ad 
			//alert("1:" + CurrentID);
			if ( CurrentID !=null ){
				var objAd = document.getElementById(CurrentID);
				objAd.style.backgroundColor = "#ffffff";
			}else{
			}
			//turn  On current ad
			obj.style.backgroundColor = "#CCFFCC";
			
			//store which Ad is On
			CurrentID = elementId;
		}else{
			if ( CurrentID == elementId){
				//turn off this ad
				clickOn = 0;
				map.removeOverlay(currentMarker);
				//if (mgr.isHidden()){
				//	map.removeOverlay(marker);
				//}
				if (mgr.isHidden()){
					map.addOverlay(marker);
					currentMarker = marker
				}
				//marker.openInfoWindowHtml(html);
				marker.openExtInfoWindow(
                map,
                "custom_info_window_darkblue",
                html, { beakOffset: 3, paddingX: 60, paddingY: 5 }
		        );
				//turn off ad
				obj.style.backgroundColor = "#ffffff";
				CurrentID = null;
			}else{
				//turning on a new ad
				clickOn = 1;
				//hide any listing marker that shows
				map.removeOverlay(currentMarker);
				if (mgr.isHidden()){
					map.addOverlay(marker);
					currentMarker = marker
	            }
	            //marker.openInfoWindowHtml(html);
	            marker.openExtInfoWindow(
                map,
                "custom_info_window_darkblue",
                html, { beakOffset: 3, paddingX: 60, paddingY: 5 }
		        );
				//turn off last clicked Ad 
				//alert("1:" + CurrentID);
				if ( CurrentID !=null ){
					var objAd = document.getElementById(CurrentID);
					objAd.style.backgroundColor = "#ffffff";
				}else{
				}
				//turn  On current ad
				obj.style.backgroundColor = "#CCFFCC";
				
				//store which Ad is On
				CurrentID = elementId;
			}
		}
    return false;
  };
}	

      /**
       * Helper function to hide the given DOM element
       * @param {Object} element The DOM element that should be hidden
       */
      function hide(element){
        element.style.display = "none";
        element.style.position = "absolute";
      }
      /**
       * Helper function to show the given DOM element
       * @param {Object} element The DOM element that should be displayed
       */
      function show(element){
        element.style.display = "block";
        element.style.position = "relative";
      }




    //]]>
