	var barsIcon = '/markers/mm_20_blue.png';
	var restaurantIcon = '/markers/mm_20_red.png';
	var coffeeIcon = '/markers/coffee_icon.png';
	var hotelIcon = '/markers/mm_20_yellow.png';
	var retailIcon = '/markers/mm_20_orange.png';
	var condoIcon = '/markers/mm_20_brown.png';
	var gamblingIcon = '/markers/mm_20_purple.png';
	var blackIcon = '/markers/mm_20_black.png';
	var libraryIcon = '/markers/library-icon.png';
	var parkingIconSmall = '/markers/parking_small.png';
	var infoWindow;
	var parkingIconSmall = '/markers/parking_small.png';
  
	function mapNewReference(map,latlng){
		map.panTo(latlng);
		if (map.refPoint != '')
			reloadsideBar(map,latlng.lat(),latlng.lng());
		
	}
	function toggleGroup(type) {
      		for (var i = 0; i < markerGroups[type].length; i++) {
        		var marker = markerGroups[type][i];
        		if (marker.isHidden()) {
          			marker.show();
        		} else {
          			marker.hide();
        		}
      		} 
    	}
	function makeMarker(map,options){
  		var marker = new google.maps.Marker({map:map});
		var contentString,contentClass;
		var latLng;

	  	marker.setOptions(options);
		if (options.content){
  			google.maps.event.addListener(marker, 'click', function(){
				if (options.contentClass)
					contentClass=options.contentClass;
				else {
					contentClass='infoWindow';
				}
				contentString = '<div class=\"' + contentClass + '\">' + this.content;
				if (this.distance)
					contentString +=  '<br>' + this.distance + ' miles';
				contentString  += '</div>';
    				map.infoWindow.setOptions(options);
    				map.infoWindow.setOptions({content: contentString});
    				map.infoWindow.open(map, marker);
				mapNewReference(map,marker.position)
				if ('sideBar' in map){
    					if(marker.sideBarButton) marker.sideBarButton.button.focus();
				}
  			});
		}
		if ('markerBounds' in map)
			map.markerBounds.extend(marker.position);
		if('sideBar' in map){
    			marker.sideBarButton = new sideBarItem(marker, options, map.sideBar.width);
    			//marker.sideBarButton.addIn(marker.sidebarItemDivName);
  		}
  		return marker;
	}
	function mapRefPoint(map,point){
		map.refPoint=point;
	}
	function sideBar(divID,size,isStatic,show_distance,width){
		this.sideBarDiv = divID;
		this.size = size;
		this.static = isStatic;
		this.showDistance = show_distance;
		this.width = width;
	}
	function sideBarItem(marker, opts, width){
  		var tag = opts.sidebarItemType || 'button';
  		var row = document.createElement(tag);
		row.innerHTML = opts.sidebarItem;
		row.className = opts.sidebarItemClassName || 'sideBarItem';
		row.className = 'sideBarItem';
		row.style.display = 'block';
		row.style.width = '160px';
		row.onclick = function(){
			google.maps.event.trigger(marker, 'click');
  		}
		row.onmouseover = function(){
			google.maps.event.trigger(marker, 'mouseover');
		}
		row.onmouseout = function(){
			google.maps.event.trigger(marker, 'mouseout');
		}
		this.button = row;
	}
	// adds a sidebar item to a <div>
	sideBarItem.prototype.addIn = function(block){
		if(block && block.nodeType == 1){
			this.div = block;
		} else {
    			this.div = document.getElementById(block)
    				|| document.getElementById('markerBar')
    				|| document.getElementsByTagName('body')[0];
		}
		this.div.appendChild(this.button);
	}
	// deletes a sidebar item
	sideBarItem.prototype.remove = function(){
		if(!this.div) 
			return false;
		this.div.removeChild(this.button);
		return true;
	}
	function sideBarLoad(sideBar,venueArray)
	{
		var i,n;
		var marker;
		var venue;
		
		n=sideBar.size;
		if (venueArray.length < n)
			n=venueArray.length;
		for (i=0;i<n;i++){
			venue=venueArray[i];
			marker=venue.marker;
			if (sideBar.showDistance){
				marker.distance=venue.distance;
				marker.sideBarButton.button.innerHTML = venue.title + '<br>' + marker.distance + ' miles';
			} else {
				marker.sideBarButton.button.innerHTML = venue.title;
			}
			marker.sideBarButton.addIn(sideBar.sideBarDiv);
		}
	}
	function sideBarClear(sideBar)
	{
		var div;
	
    		div=document.getElementById(sideBar.sideBarDiv)
		div.innerHTML = '';
	}
	function venue(marker,title,lat,lng,distance){
		this.marker = marker;
		this.title = title;
		this.lat = lat;
		this.lng = lng;
		this.distance = distance;
		this.showVenue = function() { return (this.title + ' ' + this.distance);};
	}
	function venue_sortByDistance(a,b){
		if (a.distance < b.distance)
			return(-1);
		if (a.distance > b.distance)
			return(1);
		return(0);
	}
	Array.prototype.find = function(searchStr) {
  	var returnArray = false;
  	for (i=0; i<this.length; i++) {
      		if (this[i].title.indexOf(searchStr,0) != -1) {
			if (!returnArray) { returnArray = [] }
        			return i;
      			}
  		}
		return(-1);
	}
// Calculate distance in Miles
//var d = GeoCodeCalc.CalcDistance(lat1,lng1,lat2,lng2, GeoCodeCalc.EarthRadiusInMiles); 

	var GeoCodeCalc = {};
	GeoCodeCalc.EarthRadiusInMiles = 3956.0;
	GeoCodeCalc.EarthRadiusInKilometers = 6367.0;
	GeoCodeCalc.ToRadian = function(v) { return v * (Math.PI / 180);};
	GeoCodeCalc.DiffRadian = function(v1, v2) { 
		return GeoCodeCalc.ToRadian(v2) - GeoCodeCalc.ToRadian(v1);
	};
	GeoCodeCalc.CalcDistance = function(lat1, lng1, lat2, lng2, radius) { 
		return radius * 2 * Math.asin( Math.min(1, Math.sqrt( ( Math.pow(Math.sin((GeoCodeCalc.DiffRadian(lat1, lat2)) / 2.0), 2.0) + Math.cos(GeoCodeCalc.ToRadian(lat1)) * Math.cos(GeoCodeCalc.ToRadian(lat2)) * Math.pow(Math.sin((GeoCodeCalc.DiffRadian(lng1, lng2)) / 2.0), 2.0) ) ) ) );
	};
	function venues_recalcDistance(venueArray,newLat,newLng){
		var i=0;
		var s;
		var venue;
		
		for (i=0;i<venueArray.length;i++){
			venue=venueArray[i];
			venue.distance=GeoCodeCalc.CalcDistance(newLat,newLng,venue.lat,venue.lng,GeoCodeCalc.EarthRadiusInMiles);
			venue.distance=Math.round(venue.distance*100)/100;
			if ('distance' in venue.marker)
				venue.marker.distance = venue.distance;
		}
	}
	function reloadsideBar(map,lat,lng){
		var sideBar = map.sideBar;

		if (!sideBar || sideBar.static)
			return;
		sideBarClear(sideBar);
		if (sideBar.showDistance != 0){
			if (map.refPoint){
				lat=map.refPoint.lat();
				lng=map.refPoint.lng();
			}
              		venues_recalcDistance(map.markerArray,lat,lng);
                	map.markerArray.sort(venue_sortByDistance);
		}
                sideBarLoad(sideBar,map.markerArray,sideBar.size);
	}


