var allOff = 0;
noHover = false;
var hostname = location.host;
var curPage = 0;
var maxNum = 0;
var markers = new Array();
var eventArray = new Array();
var activityArray = new Array();
var filteredArray = new Array();
var filteredActivityArray = new Array();

// creates the popup info window and zooms in on the map when a result is clicked
function createMarkerClickHandler(marker, dpoint) {
	  return function() {
		//changeInfoDisplay(marker.listid);
		fSel('a'+marker.listid);
            //document.getElementById('a'+marker.listid).scrollIntoView(false);
			dijit.scrollIntoView('a'+marker.listid);
		infoStr =  '<div id="mapInfoBox">';
		infoStr += '<div id="mapInfoName"><a href="/groups/'+dpoint.id+'">' + dpoint.name + '</a></div>';
		infoStr += '<div id="mapInfoDetails">' + dpoint.street_address + '</div>';
		infoStr += '<div id="mapInfoDetails">' + (dpoint.city ? dpoint.city + ', ' : '') + dpoint.state + ' ' + (dpoint.zipcode != 0 ? dpoint.zipcode : '') + '</div>';
		infoStr += '<div id="mapInfoDetails">' + dpoint.phone + ' </div>';
		infoStr += '<div id="mapInfoMembers"><strong><font color="#FF9933">'+dpoint.memcount+'</font></strong> members</div>';
		infoStr += '<div id="mapInfoLinks">';
		infoStr += '<div style="text-align: center; width: 33%; float: left;"><a href="/groups/'+dpoint.id+'">View Group</a></div>';
		infoStr += '<div style="text-align: center; width: 33%; float: left;"><a onclick="joinGroup('+dpoint.id+');" href="#">Join Group</a></div>';
		infoStr += '<div style="text-align: center; width: 34%; float: right;">';
		if (dpoint.website) infoStr += '<a href="' + dpoint.website + '" target="_blank">Website</a>';
		infoStr += '</div></div></div>';
            map.setZoom(15);
	    marker.openInfoWindowTabsHtml([new GInfoWindowTab("Info",infoStr)]);//,new GInfoWindowTab("Street View","<div style='overflow:auto; width:300px; height:130px' id='svpano"+dpoint.id+"'></div>")],{autoScroll:true,maxHeight:130,maxWidth:	300});
        return false;
	  };
	}
// Handles No Flash Error
    function handleNoFlash(errorCode) {
        if (errorCode == 603) {
          alert("Error: Flash doesn't appear to be supported by your browser");
          return;
        }
      }
    
    function latLngAlert(id) {
    	if (datapointsArray[id].marker) {
    		datapointsArray[id].marker.show();
    	} else {
	    	dpoint = datapointsArray[id];
			var latlng = new GLatLng(dpoint.latitude,dpoint.longitude);
			var letteredIcon = new GIcon(baseIcon);
			letteredIcon.image = "http://"+hostname+"/icons/mkr_" + dpoint.type + ".png";
	
		   	var marker;
		   	if (allOff == 0 && filters[datapointsArray[id].type] == 1)
		   		marker = new GMarker(new GLatLng(dpoint.latitude,dpoint.longitude),{ icon: letteredIcon, title: dpoint.name});
		   	else 
		   		marker = new GMarker(new GLatLng(dpoint.latitude,dpoint.longitude),{ icon: letteredIcon, title: dpoint.name, hide: true});
			var handler = createMarkerClickHandler(marker,dpoint);
			GEvent.addListener(marker, 'click', handler);
			datapointsArray[id].handler = handler;
			datapointsArray[id].marker = marker;
			marker.listid = id;
			map.addOverlay(marker);
    	}
    }
   
    function profileLatLngAlert(name,type,lat,lng) {
   		var latlng = new GLatLng(lat,lng);
		var letteredIcon = new GIcon(baseIcon);
		letteredIcon.image = "http://"+hostname+"/icons/mkr_" + type + ".png";

	   	var marker = new GMarker(latlng,{ icon: letteredIcon, title: name});
		map.addOverlay(marker);
    }
    
// used for searches on main page	
	function createRequest(url) {
		dojo.xhrGet({
        url: url,
        handleAs: "json",
        load: function(responseObject, ioArgs) {
				updateResults(responseObject);
        	}
		});
	}

	function createActivityRequest(url) {
		dojo.xhrGet({
		url: url,
		handleAs: "json",
		load: function(responseObject, ioArgs) {
				updateActivityResults(responseObject);
			}
		});
	}

	function createEventRequest(url) {
		dojo.xhrGet({
        url: url,
        handleAs: "json",
        load: function(responseObject, ioArgs) {
				updateEventResults(responseObject);
        	}
		});
	}
// callback for createRequest
	function updateResults(responseObject) {
		var results = responseObject.results;
		maxNum = responseObject.total;
		curPage = 0;
		for (var i = 0; i < responseObject.results.length; i++) {
			datapointsArray[i] = responseObject.results[i];
			if (markerMgr[responseObject.results[i].type] == null) 
				markerMgr[responseObject.results[i].type] = new Array();
			markerMgr[responseObject.results[i].type].push(i);
			if (searchfilters[responseObject.results[i].type]) filteredArray.push(i);
		}
		if (responseObject.results.length > 0)
			dojo.byId("resControl").style.display = "block";
		curNum = datapointsArray.length;
		showSearchResults();
	}

	function updateActivityResults(responseObject) {
		var activities = responseObject.results;
		//alert(responseObject.total);
		maxNum = responseObject.total;
		for (var i = 0; i < responseObject.results.length; i++) {
			activityArray[i] = responseObject.results[i];
			filteredActivityArray = activityArray;
		}		
		showActivitySearchResults();
	}

	function updateEventResults(responseObject) {
		var results = responseObject.results;
		maxNum = responseObject.total;
		for (var i = 0; i < responseObject.results.length; i++) {
			eventArray[i] = responseObject.results[i];
		}
		showEventSearchResults();
	}
// gecodes the address, creates the request and reinitialize all variables
    function getNewResults(type) {
    	var geocoder = new GClientGeocoder();
    	var address = document.getElementById("searchMain").value;
		geocoder.getLatLng(address, 
			function(point) { 
				if (point) {
					// added 02-16-09
      				document.getElementById('theGroupEventResults').style.display='block';
					startPoint.setLatLng(point);
					startPoint.show();
					
					for (var i = 0; i < datapointsArray.length; i++) {
						if (datapointsArray[i].marker && !datapointsArray[i].marker.isHidden()) {
							datapointsArray[i].marker.hide();
							datapointsArray[i].marker = null;
						}
					}
					for ( var i in markerMgr) {
						markerMgr[i] = new Array();
					}
					datapointsArray = new Array();
					eventArray = new Array();
					activityArray = new Array();
					filteredArray = new Array();
					filteredActivityArray = new Array();
					curNum = 0;
					curPage = 0;
					curLat = point.lat();
					curLng = point.lng();
					map.setCenter(point,10);
					var url = "";
					var type='all';
					if (type != null && type != "" && type != "all") { 
						url = "/search_results?start="+(curNum)+"&lat="+point.lat()+"&lng="+point.lng()+"&type="+type;
						activityUrl = "/search_activities?start="+(curNum)+"&lat="+point.lat()+"&lng="+point.lng()+"&type="+type;
					}
					else {
						url = "/search_results?start="+(curNum)+"&lat="+point.lat()+"&lng="+point.lng();
						activityUrl = "/search_activities?start="+(curNum)+"&lat="+point.lat()+"&lng="+point.lng();
					}
					eventUrl = "/search_events?lat="+point.lat() + "&lng="+point.lng();
					dojo.byId("theResults").innerHTML = "";
					createRequest(url);
					createEventRequest(eventUrl);
					createActivityRequest(activityUrl)
				} else { document.getElementById("tblResults").innerHTML = "<tr><td style='color: red'><br><b>Unable to determine location<br>from address provided.</b></td></tr>"; }
			}
		);    	
    }
// initial load of google maps    
    function load(arg1,arg2) {
    	if (GBrowserIsCompatible()) {
    		map = new GMap2(document.getElementById("map_canvas"));
    		map.addControl(new GLargeMapControl());
    		map.addControl(new GMenuMapTypeControl());
    		var geocoder = new GClientGeocoder();
    		map.enableScrollWheelZoom();
    		baseIcon = new GIcon(G_DEFAULT_ICON);
    		baseIcon.shadow = "http://"+hostname+"/images/sqshadow1.png";
    		baseIcon.iconSize = new GSize(24,36);
    		baseIcon.shadowSize = new GSize(35, 35);
    		baseIcon.iconAnchor = new GPoint(12, 25);
    		baseIcon.infoWindowAnchor = new GPoint(9, 2);
    		if (arg2 != null) {
    			lat = arg1;
    			lng = arg2;
    			point = new GLatLng(arg1,arg2);
  				if (point) {
  					map.setCenter(point, 13);
  					startPoint = new GMarker(point);
  					map.addOverlay(startPoint);
				}
    		} else {
    			startAddress = arg1;
	    		geocoder.getLatLng(startAddress, 
		  			function(point) { 
		  				if (point) {
		  					if (startAddress == "USA") {
		  						map.setCenter(point,4);
		  						startPoint = new GMarker(point, {hide: true});
		  						map.addOverlay(startPoint);
		  					}
		  					else {
		  						map.setCenter(point, 13);
		  						startPoint = new GMarker(point);
		  						map.addOverlay(startPoint);
		  					}
						} 
	  				}
	    		);
    		}
//    		GEvent.addListener(map,"moveend",getNewMarkers);
        }
    }
// not used
    function grpLoad(arg1,arg2) {
    	if (GBrowserIsCompatible()) {
    		map = new GMap2(document.getElementById("map_canvas"));
    		map.addControl(new GSmallMapControl());
    		map.addControl(new GMenuMapTypeControl());
    		var geocoder = new GClientGeocoder();
    		map.enableScrollWheelZoom();
    		baseIcon = new GIcon(G_DEFAULT_ICON);
    		baseIcon.shadow = "http://"+hostname+"/images/sqshadow1.png";
    		baseIcon.iconSize = new GSize(24,36);
    		baseIcon.shadowSize = new GSize(35, 35);
    		baseIcon.iconAnchor = new GPoint(12, 25);
    		baseIcon.infoWindowAnchor = new GPoint(9, 2);
    		if (arg2 != null) {
    			lat = arg1;
    			lng = arg2;
    			point = new GLatLng(arg1,arg2);
  				if (point) {
  					map.setCenter(point, 10);
  					var startPoint = new GMarker(point);
  					map.addOverlay(startPoint);
				}
    		} else {
    			startAddress = arg1;
	    		geocoder.getLatLng(startAddress, 
		  			function(point) { 
		  				if (point) {
		  					map.setCenter(point, 10);
		  					var startPoint = new GMarker(point);
		  					map.addOverlay(startPoint);
						} 
	  				}
	    		);
    		}
//    		GEvent.addListener(map,"moveend",getNewMarkers);
        }
    }
// not used
    function loadGrpMap(startLat, startLng) {
    	if (GBrowserIsCompatible()) {
    		map = new GMap2(document.getElementById("map_canvas"));
    		map.addControl(new GSmallMapControl());
    		map.addControl(new GMenuMapTypeControl());
    		var geocoder = new GClientGeocoder();
    		map.enableScrollWheelZoom();
    		baseIcon = new GIcon(G_DEFAULT_ICON);
    		baseIcon.shadow = "http://"+hostname+"/images/sqshadow1.png";
    		baseIcon.iconSize = new GSize(24,36);
    		baseIcon.shadowSize = new GSize(35, 35);
    		baseIcon.iconAnchor = new GPoint(12, 25);
    		baseIcon.infoWindowAnchor = new GPoint(9, 2);
    		point = new GLatLng(startLat,startLng);
			if (point) {
  					map.setCenter(point, 13);
  					var startPoint = new GMarker(point, {draggable: true});
  					map.addOverlay(startPoint);
  					GEvent.addListener(startPoint, 'dragend', updatelatlng);
  					map.setZoom(15);
			} 
//    		GEvent.addListener(map,"moveend",getNewMarkers);
        }
    }
// called when you show/hide results based on filters
	function manageGroupMarkers(groupType, showHide) {
		if (filters == null) filters = new Array();
		filters[groupType] = showHide;
		if (showHide) {
			for (var i =0; i < markerMgr[groupType].length; i++) {
				if (datapointsArray[markerMgr[groupType][i]].type == groupType && datapointsArray[markerMgr[groupType][i]].marker) {
					if ((curPage*50)< markerMgr[groupType][i] && markerMgr[groupType][i] < (curPage+1)*50)
						datapointsArray[markerMgr[groupType][i]].marker.show();
					if (dojo.byId("a"+i)) dojo.byId("a"+i).style.display = 'block';
				}
			}
		} else {
			for (var i =0; i < markerMgr[groupType].length; i++) {
				if (datapointsArray[markerMgr[groupType][i]].type == groupType && datapointsArray[markerMgr[groupType][i]].marker) {
					datapointsArray[markerMgr[groupType][i]].marker.closeInfoWindow();
					datapointsArray[markerMgr[groupType][i]].marker.hide();
					if (dojo.byId("a"+i)) dojo.byId("a"+i).style.display = 'none';
				}
			}
		}
		filterSearch(groupType,showHide);
		// show new results
	}
// not used - was started to get new markers when map is dragged	
	function getNewMarkers() {
    	var geocoder = new GClientGeocoder();
    	var address = document.getElementById("searchMain").value;
		geocoder.getLatLng(address, 
			function(point) { 
				if (point) {
					for (var i = 0; i < datapointsArray.length; i++) {
						if (datapointsArray[i].marker && !datapointsArray[i].marker.isHidden()) {
							datapointsArray[i].marker.hide();
							datapointsArray[i].marker = null;
						}
					}
					datapointsArray = new Array();					
					curNum = 0;
					curPage = -1;
					curLat = point.lat();
					curLng = point.lng();
					var url = "";
					var type='all';
					bounds = map.getBounds();
					sw = bounds.getSouthWest();
					ne = bounds.getNorthEast();
					w = sw.lng();
					s = sw.lat();
					e = ne.lng();
					n = ne.lat();
					url = "/search_results?start="+(curNum)+"&lat="+point.lat()+"&lng="+point.lng()+"&type="+type+"&n="+n+"&s="+s+"&e="+e+"&w="+w;
					createRequest(url);
				} else { alert("Unable to determine location from address provided."); } 
			}
		);    	
	}
// allows you to page between results, 50 at a time
	function showSearchPage(pageNum) {
		curPage = pageNum;
		var maxMiles = 0;
		maxNum = filteredArray.length;
		dojo.byId('resultPages').innerHTML = "Results <b>"+(curPage*50+1)+"-"+((curPage+1)*50>maxNum?maxNum:(curPage+1)*50)+"</b> of <b>"+maxNum+"</b>";
		var testStr = '<table id=\'tblResults\' class="resultsBoxes" border="0" width="100%" cellspacing="0" cellpadding="0" height="19">';
		for (i = (pageNum*50); i < (pageNum*50+50) && i < filteredArray.length; i++) { 
			if (datapointsArray[filteredArray[i]].marker == null) {
				latLngAlert(filteredArray[i]);
			} else {
				datapointsArray[filteredArray[i]].marker.show();
			}
			maxMiles = datapointsArray[filteredArray[i]].distance;
			if (allOff == 0 && searchfilters[datapointsArray[filteredArray[i]].type] == 1)
				testStr += '<tr onclick="datapointsArray['+filteredArray[i]+'].handler(); fSel(\'a'+filteredArray[i]+'\');" id="a'+filteredArray[i]+'" style="width: 300px;" class="resultRow">';
			else
				testStr += '<tr style="display: none" onclick="datapointsArray['+filteredArray[i]+'].handler(); fSel(\'a'+filteredArray[i]+'\')" id="a'+filteredArray[i]+'" style="width: 300px;" class="resultRow">';				
			testStr += '<td class="resultsName" style="width: 260px; height: 18px">'+datapointsArray[filteredArray[i]].name+'</td>';
			testStr += '<td class="resultsDistance" style="width: 40px; height: 18px">'+Math.round(datapointsArray[filteredArray[i]].distance*100)/100+'mi</td>';
			testStr += '</tr>';
		}
		testStr+="</table>";
		//alert(dojo.byId("tblResults").innerHTML);
		dojo.byId("theResults").innerHTML = testStr;

		setSearchZoom(maxMiles);		
	}
// populates the side column with the results	
	function showSearchResults() {
		//alert("showing results");
		var maxMiles = 0;
		dojo.byId('resultPages').innerHTML = "Results <b>"+(curPage*50+1)+"-"+((curPage+1)*50>maxNum?maxNum:(curPage+1)*50)+"</b> of <b>"+maxNum+"</b>";
		var testStr = '<table id=\'tblResults\' class="resultsBoxes" border="0" width="100%" cellspacing="0" cellpadding="0" height="19">';
		for (i = (curPage*50); i < ((curPage+1)*50) && i < filteredArray.length; i++) {
			if (datapointsArray[filteredArray[i]].marker == null) {
				latLngAlert(filteredArray[i]);
			}
			maxMiles = datapointsArray[filteredArray[i]].distance;
			if (allOff == 0 && filters[datapointsArray[filteredArray[i]].type] == 1)
				testStr += '<tr onmouseover="datapointsArray['+filteredArray[i]+'].handler(); fSel(\'a'+filteredArray[i]+'\');" id="a'+filteredArray[i]+'" style="width: 300px;" class="resultRow">';
			else
				testStr += '<tr onmouseover="datapointsArray['+filteredArray[i]+'].handler(); fSel(\'a'+filteredArray[i]+'\')" id="a'+filteredArray[i]+'" style="width: 300px;" class="resultRow">';				
			testStr += '<td class="resultsName" style="width: 260px; height: 18px">'+datapointsArray[filteredArray[i]].name+'</td>';
			testStr += '<td class="resultsDistance" style="width: 40px; height: 18px">'+Math.round(datapointsArray[filteredArray[i]].distance*100)/100+'mi</td>';
			testStr += '</tr>';
		}
		testStr+="</table>";
		//alert(dojo.byId("tblResults").innerHTML);
		dojo.byId("theResults").innerHTML = testStr;

		setSearchZoom(maxMiles);		
	}
// shoes events based on your location
	function showEventSearchResults() {
		monthArray = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
		var eventStr = '';
		for (i =0; i < 10 && i < eventArray.length; i++) {
			eventStr += '<div id="eventRow" onmouseover="hoverOn(this)" onmouseout="hoverOff(this)" style="border-bottom:1px solid #CCCCCC; padding:0;">';
			eventStr += '<div id="eventData1" style="width: 70px;"><span class="calSheet calSheetSmall"><span title="Click to view more information on this event"><span class="month">'+monthArray[eventArray[i].date.substring(5,7)-1]+'</span><span class="day">'+eventArray[i].date.substring(8,10)+'</span></span></span></div>';
			eventStr += '<div id="eventData2"><a href="/events/'+eventArray[i].id+'">'+eventArray[i].name+'</a></div>';
			eventStr += '<div id="eventData3" style="width: 125px">'+eventArray[i].city+", "+eventArray[i].state+'</div></div>';
		}
		dojo.byId("localEvents").innerHTML = eventStr;
	}

	function showActivitySearchResults() {
		//Commented out unfiltered array processing.
		monthArray = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
		var activityStr = '';
		var today = new Date();
		var activityDate = new Date();
		var earlierToday = false;
		var loopLimit = 10;
		//for (i =0; i < 10 && i < activityArray.length; i++) {
		for (i =0; i < loopLimit && i < filteredActivityArray.length; i++) {
			// Convert 24 hour clock to 12 hour
			earlierToday = false;
			h = filteredActivityArray[i].time.substring(0,2);
			m = filteredActivityArray[i].time.substring(3,5);
			year = filteredActivityArray[i].date.substring(0,4);
			month = filteredActivityArray[i].date.substring(5,7);
			day = filteredActivityArray[i].date.substring(8,10);
			activityDate = new Date();
			activityDate.setFullYear(year);
			activityDate.setMonth(month - 1);
			activityDate.setDate(day);
			activityDate.setHours(h);
			activityDate.setMinutes(m);
			//activityDate.setTime(Date.parse(dateString));
			//alert(activityDate.toString());
			if (activityDate < today) earlierToday = true;
			if (h >= 12) {
				if (h==12) { time12 = '12:'+m+'pm'; }
				else if (h==13) { time12 = '1:'+m+'pm'; }
				else if (h==14) { time12 = '2:'+m+'pm'; }
				else if (h==15) { time12 = '3:'+m+'pm'; }
				else if (h==16) { time12 = '4:'+m+'pm'; }
				else if (h==17) { time12 = '5:'+m+'pm'; }
				else if (h==18) { time12 = '6:'+m+'pm'; }
				else if (h==19) { time12 = '7:'+m+'pm'; }
				else if (h==20) { time12 = '8:'+m+'pm'; }
				else if (h==21) { time12 = '9:'+m+'pm'; }
				else if (h==22) { time12 = '10:'+m+'pm'; }
				else if (h==23) { time12 = '11:'+m+'pm'; }
			}
			else if (h==00) { time12 = '12:'+m+'am'; }
			else time12= h+':'+m+'am';
			
			//activityStr += '<div id="activityRow" onmouseover="hoverOn(this)" onmouseout="hoverOff(this)"><div id="activityData1" style="width: 70px;">'+activityArray[i].date+'</div><div id="activityData2"><a href="/groupActivities?GID='+activityArray[i].gid+'">'+activityArray[i].name+'</a></div><div id="activityData3" style="width: 125px">'+activityArray[i].city+", "+activityArray[i].state+'</div>';
			//activityStr += '<div id="activityData1" style="width: 70px;">'+activityArray[i].time+'</div><div id="activityData2">'+activityArray[i].gname+'</div><div id="activityData3" style="width: 125px">&nbsp;</div></div>';
			//activityStr += '<div id="activityRow" onmouseover="hoverOn(this)" onmouseout="hoverOff(this)"><div id="activityData1" style="width: 70px;">'+filteredActivityArray[i].date+'</div><div id="activityData2"><a href="/groupActivities?GID='+filteredActivityArray[i].gid+'">'+filteredActivityArray[i].name+'</a></div><div id="activityData3" style="width: 125px">'+filteredActivityArray[i].city+", "+filteredActivityArray[i].state+'</div>';
			//activityStr += '<div id="activityData1" style="width: 70px;">'+filteredActivityArray[i].time+'</div><div id="activityData2">'+filteredActivityArray[i].gname+'</div><div id="activityData3" style="width: 125px">&nbsp;</div></div>';
			if (earlierToday == false) {
				activityStr += '<div id="activityRow" onmouseout="hoverOff(this)" onmouseover="hoverOn(this)" style="border-bottom:1px solid #CCCCCC; padding: 0; background: transparent none repeat scroll 0% 0%; cursor: pointer; color: rgb(153, 153, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">';
				activityStr += '<div id="activityData1" style="width: 50px;"><span class="calSheet calSheetSmall"><span title="Click to view activity calendar for'+filteredActivityArray[i].gname+'"><span class="month">'+monthArray[filteredActivityArray[i].date.substring(5,7)-1]+'</span><span class="day">'+filteredActivityArray[i].date.substring(8,10)+'</span></span></span></div>';
				activityStr += '<div id="activityData2" style="width: 305px"><img class="smallIcon" src="icons/icon_'+filteredActivityArray[i].type+'.png" style="float: left; margin: 0 5px 0 0; width: 31px; height: 31px;"/><a href="/activities/'+filteredActivityArray[i].gid+'">'+time12+' - '+filteredActivityArray[i].name+'</a><br><span style="color:#000000;">'+filteredActivityArray[i].gname+'</span></div>';
				activityStr += '<div id="activityData3" style="width: 75px;">'+filteredActivityArray[i].city+", "+filteredActivityArray[i].state+'</div></div>';				
			}
			else loopLimit++;
		}
		dojo.byId("localActivity").innerHTML = activityStr;
	}

// changes info display regarding result being hovered on
	function changeInfoDisplay(index,nh) {
		if (!nh) {
			dojo.byId("itemIcon").innerHTML = '<img border="0" src="/icons/big/icon_'+datapointsArray[index].type+'.png" width="68" height="68">';
			dojo.byId("itemName").innerHTML = '<a href="/groups/'+datapointsArray[index].id+'">'+datapointsArray[index].name+'</a>';
			dojo.byId("itemAddress1").innerHTML = (datapointsArray[index].street_address) ? datapointsArray[index].street_address+'&nbsp; ' : '';
			dojo.byId("itemAddress2").innerHTML = (datapointsArray[index].street_address2) ? datapointsArray[index].street_address2+'&nbsp; ' : '';
			dojo.byId("itemCityStateZip").innerHTML = ( (datapointsArray[index].city) ? (datapointsArray[index].city+', ') : '')+(datapointsArray[index].state ? datapointsArray[index].state : '')+'&nbsp; '+ ((datapointsArray[index].zipcode != 0)? datapointsArray[index].zipcode : ''); 
			dojo.byId("itemPhone").innerHTML = (datapointsArray[index].phone) ? datapointsArray[index].phone : ''; 
			descr = datapointsArray[index].description;
			descr = descr.substring(0,400);
			if(datapointsArray[index].description.length>400) descr += "...<a href='/groups/"+datapointsArray[index].id+"'>more</a>";
			dojo.byId("itemDescription").innerHTML = (descr) ? descr : '';
			dojo.byId("numMembers").innerHTML = '<strong>'+datapointsArray[index].memcount+'</strong>&nbsp;<h5>Members</h5>';
		} else if (noHover != true ) {
			dojo.byId("itemIcon").innerHTML = '<img border="0" src="/icons/big/icon_'+datapointsArray[index].type+'.png" width="68" height="68">';
			dojo.byId("itemName").innerHTML = '<a href="/groups/'+datapointsArray[index].id+'">'+datapointsArray[index].name+'</a>';
			dojo.byId("itemAddress1").innerHTML = (datapointsArray[index].street_address) ? datapointsArray[index].street_address+'&nbsp; ' : '';
			dojo.byId("itemAddress2").innerHTML = (datapointsArray[index].street_address2) ? datapointsArray[index].street_address2+'&nbsp; ' : '';
			dojo.byId("itemCityStateZip").innerHTML = ( (datapointsArray[index].city) ? (datapointsArray[index].city+', ') : '')+(datapointsArray[index].state ? datapointsArray[index].state : '')+'&nbsp; '+ ((datapointsArray[index].zipcode != 0)? datapointsArray[index].zipcode : ''); 
			dojo.byId("itemPhone").innerHTML = (datapointsArray[index].phone) ? datapointsArray[index].phone : ''; 
			descr = datapointsArray[index].description;
			descr = descr.substring(0,400);
			if(datapointsArray[index].description.length>400) descr += "...<a href='/groups/"+datapointsArray[index].id+"'>more</a>";
			dojo.byId("itemDescription").innerHTML = (descr) ? descr : '';
			dojo.byId("numMembers").innerHTML = '<strong>'+datapointsArray[index].memcount+'</strong>&nbsp;<h5>Members</h5>';
		}
	}
// sets zoom on map	
	function setSearchZoom(miles) {
		if (miles < 0.2) map.setZoom(16);
		else if (miles < 0.5) map.setZoom(15);
		else if (miles < 1) map.setZoom(14);
		else if (miles < 2) map.setZoom(13);
		else if (miles < 3) map.setZoom(12);
		else if (miles < 7) map.setZoom(11);
		else if (miles < 15) map.setZoom(10);
		else map.setZoom(9);
	}
// changes the markers and shows new set of results based on clicking a page	
	function changeSearchPage(forward) {
		if (forward && filteredArray.length > (curPage+1)*50) {
			for (var i = 0; i < 50 && (curPage*50 + i < filteredArray.length); i++) {				
				if (datapointsArray[filteredArray[curPage*50 + i]] && datapointsArray[filteredArray[curPage*50 + i]].marker) {
					datapointsArray[filteredArray[curPage*50 + i]].marker.hide();
				}
			}
			curPage++;
			showSearchPage(curPage);			
		} else if (!forward && curPage != 0 && filteredArray.length > 0) {
			for (var i = 0; i < 50 && (curPage*50 + i < filteredArray.length); i++) {				
				if (datapointsArray[filteredArray[curPage*50 + i]] && datapointsArray[filteredArray[curPage*50 + i]].marker){
					datapointsArray[filteredArray[curPage*50 + i]].marker.hide();
					datapointsArray[filteredArray[curPage*50 + i]].marker = null;
				}
			}
			curPage--;
			showSearchPage(curPage);
		}
		noHover = false;
	}
    
    
	function numberorder(a,b) { return a.distance - b.distance; }

	// Functions to handle the map filters
	function filterClick(x,type,f) {

			filterNone();
	
			
			allOff = 0;
	        filter = 'filter'+f;
	        x = document.getElementById(filter).src;
	        l = x.length;
	        c = x.substring(l-6,l);
	        s = '_g.png';
	        y = x.substring(0,l-4);
	        y = y + s;

	        if (c != s) {
	                 document.getElementById(filter).src = y;
	                 manageGroupMarkers(type,0);
	        }
	        else if (c == s) {
	                document.getElementById(filter).src = y.substring(0,l-6)+'.png';
	                manageGroupMarkers(type,1);
	        }
	        for (var i=0; i < datapointsArray.length; i++) {
	        	if (datapointsArray[i].marker) {
	        		datapointsArray[i].marker.hide();
	        		datapointsArray[i].marker.closeInfoWindow();
	        	}
	        }
	        showSearchPage(0);
	        filterActivities(type);
	}
	
	function filterActivities(fType) {
        filteredActivityArray = new Array();
        
        for (var i = 0; i < activityArray.length; i++) {
        	if (activityArray[i].type == fType) filteredActivityArray[filteredActivityArray.length] = activityArray[i];
        }
        
        showActivitySearchResults();		
	}

	function filterAll() {
			allOff  = 0;
	        for(var i = 1; i < 17; i++)
	        {
	                filter = 'filter'+i;
	                x = document.getElementById(filter).src;
	                l = x.length;
	                c = x.substring(l-6,l);
	                s = '_g.png';
	                y = x.substring(0,l-4);
	                y = y + s;

	                if (c == s) {
	                        document.getElementById(filter).src = y.substring(0,l-6)+'.png';
	                }
	        }
	        for (var t in searchfilters) {	        	
	        	searchfilters[t] = 1;
	        }
	        for (var i = 0; i < datapointsArray.length; i++) {
	        	filteredArray[i] = i;
	        }
	        curPage = 0;
	        showSearchPage(0);
	        
	        filteredActivityArray = new Array();
	        filteredActivityArray = activityArray;
	        showActivitySearchResults();
	}

	function filterNone() {
		if (filteredArray) {
	        for (i=(curPage*50);i<(curPage+1)*50 && i <filteredArray.length;i++) {
				if (dojo.byId('a'+filteredArray[i])) dojo.byId('a'+filteredArray[i]).className='resultRow';
			}
		}
		allOff = 1;
        for(var i = 1; i < 17; i++) {
                filter = 'filter'+i;
                x = document.getElementById(filter).src;
                l = x.length;
                c = x.substring(l-6,l);
                s = '_g.png';
                y = x.substring(0,l-4);
                y = y + s;
                if (c != s) {
                	document.getElementById(filter).src = y;
                }
        }
        for (var t in searchfilters) {	        	
        	searchfilters[t] = 0;
        }
        for (var i in filters) {
        	filters[i] = 0;
        }
        if (datapointsArray) {
	        for (i=0; i < datapointsArray.length;i++) {
	        	if (dojo.byId('a'+i)) dojo.byId('a'+i).style.display='none';
	        	if (datapointsArray[i].marker) {
	        		datapointsArray[i].marker.hide();
	        		datapointsArray[i].marker.closeInfoWindow();
	        	}
	        }
        }
        filteredArray = new Array();

        filteredActivityArray = new Array();
        showActivitySearchResults();
}
	
	function filterSearch(type,onoff) {
		var filtered = 0;
		if (searchfilters[type] == onoff){
			filtered = 1;
		} else {
			searchfilters[type] = onoff;
		}
		if (!filtered && onoff) {
				filteredArray = filteredArray.concat(markerMgr[type]);
		} else if (!filtered && !onoff) {
			filteredArray = new Array();
			for (var t in searchfilters) {
				if (searchfilters[t]) {
					filteredArray = filteredArray.concat(markerMgr[t]);
				}
			}
		}
		filteredArray.sort(sortFiltered);
	}

	function sortFiltered(i,j) {
		return (i-j);
	}

function hoverOn(elt) {
elt.style.cursor='hand';
elt.style.cursor='pointer';
}

// Handling the enter key to search

function pressEnter(event) {
	if (!event && window.event) event = window.event;
		if (event.keyCode == 13) {
			getNewResults(dojo.byId('searchMain'))
		}
}

// Handling the clicking of the search results

function fSel(x, index) {
	whatClass = document.getElementById(x).className;
	noHover = true;
	var numResults = datapointsArray.length;
	for (var i = (curPage*50); i < (curPage+1)*50 && i < filteredArray.length; i++) {
		document.getElementById('a'+filteredArray[i]).className='resultRow';
	}
	if (document.getElementById(x).className=='resultRow') {
		document.getElementById(x).className='resultRowC';
	} else if (document.getElementById(x).className=='resultRowC') {
		document.getElementById(x).className='resultRow';
	}
}


function ismaxlength(obj){
	var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
	if (obj.getAttribute && obj.value.length>mlength)
		obj.value=obj.value.substring(0,mlength)
}

/// Used for Index Group Type Filters
///
/***********************************************
* Fixed ToolTip script- © Dynamic Drive (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
		
var tipwidth='150px' //default tooltip width
var tipbgcolor='#FF9933'  //tooltip bgcolor
var disappeardelay=250  //tooltip disappear speed onMouseout (in miliseconds)
var vertical_offset="0px" //horizontal offset of tooltip from anchor link
var horizontal_offset="-28px" //horizontal offset of tooltip from anchor link

/////No further editing needed

var ie4=document.all
var ns6=document.getElementById&&!document.all

if (ie4||ns6)
document.write('<div id="fixedtipdiv" style="visibility:hidden;width:'+tipwidth+';background-color:'+tipbgcolor+'" ></div>')

function getposOffset(what, offsettype){
var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
var parentEl=what.offsetParent;
while (parentEl!=null){
totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
parentEl=parentEl.offsetParent;
}
return totaloffset;
}


function showhide(obj, e, visible, hidden, tipwidth){
if (ie4||ns6)
dropmenuobj.style.left=dropmenuobj.style.top=-500
if (tipwidth!=""){
dropmenuobj.widthobj=dropmenuobj.style
dropmenuobj.widthobj.width=tipwidth
}
if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")
obj.visibility=visible
else if (e.type=="click")
obj.visibility=hidden
}

function iecompattest(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function clearbrowseredge(obj, whichedge){
var edgeoffset=(whichedge=="rightedge")? parseInt(horizontal_offset)*-1 : parseInt(vertical_offset)*-1
if (whichedge=="rightedge"){
var windowedge=ie4 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15
dropmenuobj.contentmeasure=dropmenuobj.offsetWidth
if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure)
edgeoffset=dropmenuobj.contentmeasure-obj.offsetWidth
}
else{
var windowedge=ie4 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18
dropmenuobj.contentmeasure=dropmenuobj.offsetHeight
if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure)
edgeoffset=dropmenuobj.contentmeasure+obj.offsetHeight
}
return edgeoffset
}

function fixedtooltip(menucontents, obj, e, tipwidth){
if (window.event) event.cancelBubble=true
else if (e.stopPropagation) e.stopPropagation()
clearhidetip()
dropmenuobj=document.getElementById? document.getElementById("fixedtipdiv") : fixedtipdiv
dropmenuobj.innerHTML=menucontents

if (ie4||ns6){
showhide(dropmenuobj.style, e, "visible", "hidden", tipwidth)
dropmenuobj.x=getposOffset(obj, "left")
dropmenuobj.y=getposOffset(obj, "top")
dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+"px"
dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+"px"
}
}

function hidetip(e){
if (typeof dropmenuobj!="undefined"){
if (ie4||ns6)
dropmenuobj.style.visibility="hidden"
}
}

function delayhidetip(){
if (ie4||ns6)
delayhide=setTimeout("hidetip()",disappeardelay)
}

function clearhidetip(){
if (typeof delayhide!="undefined")
clearTimeout(delayhide)
}
/***********************************************
* End Fixed ToolTip script
***********************************************/

// Used for changing CSS on the fly with JS
//
//Custom JavaScript Functions by Shawn Olson
//Copyright 2006-2008
//http://www.shawnolson.net
//If you copy any functions from this page into your scripts, you must provide credit to Shawn Olson & http://www.shawnolson.net
//*******************************************

	function changecss(theClass,element,value) {
	//Last Updated on June 23, 2009
	//documentation for this script at
	//http://www.shawnolson.net/a/503/altering-css-class-attributes-with-javascript.html
	 var cssRules;

	 var added = false;
	 for (var S = 0; S < document.styleSheets.length; S++){

    if (document.styleSheets[S]['rules']) {
	  cssRules = 'rules';
	 } else if (document.styleSheets[S]['cssRules']) {
	  cssRules = 'cssRules';
	 } else {
	  //no rules found... browser unknown
	 }

	  for (var R = 0; R < document.styleSheets[S][cssRules].length; R++) {
	   if (document.styleSheets[S][cssRules][R].selectorText == theClass) {
	    if(document.styleSheets[S][cssRules][R].style[element]){
	    document.styleSheets[S][cssRules][R].style[element] = value;
	    added=true;
		break;
	    }
	   }
	  }
	  if(!added){
	  if(document.styleSheets[S].insertRule){
			  document.styleSheets[S].insertRule(theClass+' { '+element+': '+value+'; }',document.styleSheets[S][cssRules].length);
			} else if (document.styleSheets[S].addRule) {
				document.styleSheets[S].addRule(theClass,element+': '+value+';');
			}
	  }
	 }
	}
// send AJAX Request to server
function sendXHR(type,urlpath,formname,callback,handleas) {
	handleas = (handleas ? handleas : "json");
	url = "http://" + hostname + urlpath;
	if (type == 1) {
        dojo.xhrPost ({
    	            url: url,
    	            form: formname,	    	   
    	            load: callback,
    	            error: function (error) {
    	                   alert(error);
    	            }
    	});
	} else {
      dojo.xhrGet ({		
        url: url,	    	   
        load: callback,
        handleAs: handleas,
        error: function (error) {
               alert(error);
        }		
	});
	}
}
function setStatus() {
	sendXHR(1,"/update_status","statusform",processStatus);
}
function processStatus(data) {
	dojo.byId('theStatus').innerHTML = data;
	dojo.byId('newstatus').value = '';
	fbShare(data);
}
function processGrpStatus(data) {
	dojo.byId('theStatus').innerHTML = data;
	dojo.byId('newstatus').value = '';
}

function setGroupStatus() {
	sendXHR(1,"/update_groupstatus","statusform",processGrpStatus);
}

function submitLogin() {
	sendXhr(1,"/login","loginform",processLogin);
}

function processLogin(data) {
    if (data != "SUCCESS") document.getElementById("errMsg").style.display="block";
    else { 
    	window.location="/"; 
    }
}

function submitLogout() {
	sendXHR(1,"/logout","",processLogout);
}
function processLogout (data) {
    dojo.byId('headerLogin').innerHTML = '<a href="/signon">Log In</a> or <a href="/signon">Join Us</a>';
}

function addFriend(username) {
	sendXHR(0,"/addfriend/"+username,"",processAddFriend,"text");
}
function processAddFriend(data) {
			if (data == 1) { document.getElementById('msgSlide').innerHTML = 'An add friend request has been sent to this user.'; }
			else if (data == 0) { document.getElementById('msgSlide').innerHTML = 'You have already sent this user a fitFriend request.!'; }
			else if (data == -1) { document.getElementById('msgSlide').innerHTML = 'You are not logged in. <a href="/signon">Please sign in first.</a>'; }
			else if (data == -2) { document.getElementById('msgSlide').innerHTML = 'You cannot perform this action, because the user\'s profile is set to private.'; }
			else { document.getElementById('msgSlide').innerHTML = data; }
}

function removeFriend(username) {
  	sendXHR(0,"/removefriend/"+username,"",processRemoveFriend,"text");
}
function processRemoveFriend(data) {
			if (data == 1) { document.getElementById('msgSlide').innerHTML = 'You have removed this user as a fitFriend.'; }
			else { document.getElementById('msgSlide').innerHTML = data; }
}

function joinGroup(gid) {
	sendXHR(0,"/join/"+gid,"",processJoinGroup,"text");
}

function processJoinGroup(data) {
	if (data == "SUCCESS") {
                  document.getElementById('msgSlide').innerHTML = 'You successfully joined the group!';
		if (dojo.byId("joinLeave")) dojo.byId("joinLeave").innerHTML = "<a href='#' onclick='leaveGroup("+gid+");'>Leave Group</a>";
	} else if (data == "NOLOGIN") document.getElementById('msgSlide').innerHTML = 'You need to login before you can join a group.';
	else if (data == "NOGROUP") document.getElementById('msgSlide').innerHTML = 'The group you attempted to join does not exist.';
	else if (data == "ALREADY JOINED") document.getElementById('msgSlide').innerHTML = 'You are already a member of this group.';
	else alert(data);
}

function leaveGroup(gid) {
	sendXHR(0,"/leave/"+gid,"",processLeaveGroup,"text");
}
function processLeaveGroup(data) {
	if (data == "SUCCESS") {
                document.getElementById('msgSlide').innerHTML = 'You successfully left the group.';
		if (dojo.byId("joinLeave")) dojo.byId("joinLeave").innerHTML = "<a href='#' onclick='joinGroup("+gid+");'>Join Group</a>";
    } else if (data == "NOMEMBER") document.getElementById('msgSlide').innerHTML = 'You are not a member of this group.';
    else document.getElementById('msgSlide').innerHTML = data;
}

function attendEvent(eid) {
	sendXHR(0,"/attendevent/"+eid,"",processAttendEvent,"text");
}
function processAttendEvent(data) {
	if (data == "SUCCESS") {
                  document.getElementById('msgSlide').innerHTML = 'You are now attending the event!';
		if (dojo.byId("joinLeave")) dojo.byId("joinLeave").innerHTML = "<a href='#' onclick='leaveEvent("+eid+");'>Leave Event</a>";
	} else if (data == "NOLOGIN") document.getElementById('msgSlide').innerHTML = 'You need to login before you can attend an event.';
	else if (data == "NOGROUP") document.getElementById('msgSlide').innerHTML = 'The event you attempted to attend does not exist.';
	else if (data == "ALREADY JOINED") document.getElementById('msgSlide').innerHTML = 'You are already attending this event.';
	else document.getElementById('msgSlide').innerHTML = data;
}

function leaveEvent(eid) {
	sendXHR(0,"/leaveevent/"+eid,"",processLeaveEvent,"text");
}
function processLeaveEvent(data) {
	if (data == "SUCCESS") {
                document.getElementById('msgSlide').innerHTML = 'You are no longer attending the event.';
		if (dojo.byId("joinLeave")) dojo.byId("joinLeave").innerHTML = "<a href='#' onclick='attendEvent("+eid+");'>Attend Event</a>";
    } else if (data == "NOMEMBER") document.getElementById('msgSlide').innerHTML = 'You are not attending this event.';
    else document.getElementById('msgSlide').innerHTML = data;
}

function isBlank(myString) {
	for (var i = 0; i < myString.length; i++) {
		if (myString.charAt(i) != " ") return false;
	}
	return true;
}
