    //<![CDATA[
var tcIDs = [
			{"id":"USA", "color":"color", "desc":"tcusa"},
			{"id":"M", "color":"blue", "desc":"mens"},
			{"id":"W", "color":"red", "desc":"womens"},
			{"id":"B", "color":"orange", "desc":"boys"},
			{"id":"G", "color":"pink", "desc":"girls"},
			{"id":"F", "color":"green", "desc":"family"},
			{"id":"Y", "color":"cyan", "desc":"re-entry"},
			{"id":"I", "color":"yellow", "desc":"tcimi"},
			{"id":"L", "color":"white", "desc":"referral"},
			{"id":"A", "color":"black", "desc":"admin"},
			{"id":"x", "color":"gray", "desc":"misc"}
		];

	customIcons = [];
	for( var i in tcIDs ){
		customIcons[tcIDs[i].id] = new GIcon();
		customIcons[tcIDs[i].id].image = '/imgs/locations/pin.3.'+tcIDs[i].color+'.png';
		customIcons[tcIDs[i].id].shadow = '/imgs/locations/pin.3.shadow.png';
		customIcons[tcIDs[i].id].iconSize = new GSize(32, 26);
		customIcons[tcIDs[i].id].shadowSize = new GSize(32, 26);
		customIcons[tcIDs[i].id].iconAnchor =new GPoint(13, 24);
		customIcons[tcIDs[i].id].infoWindowAnchor = new GPoint(20, 1);
	}
    
	markerGroups = [];
	for( var i in tcIDs ){
		markerGroups[tcIDs[i].id] = [];
	}
	
	function get_mGroup(center){
		// use center type to determine group (for filter)
		switch( center.getAttribute("type") ){
			case '7': mGroup = "A"; break;
			case '6': mGroup = "L"; break;
			case '5': mGroup = "I"; break;
			case '4': mGroup = "Y"; break;
			case '3': mGroup = "F"; break;
			case '2': mGroup = (center.getAttribute("gender")=="1" ? "B" : "G"); break;
			case '1': mGroup = (center.getAttribute("gender")=="1" ? "M" : "W"); break;
			default: mGroup = "x"; break;
		}
		return mGroup;
	}

var map;
var geocoder;

$(document).ready( function(){
	// FILTERS
	$('.cfilter').click( function(){
		//hide/show list
		$('.odd').removeClass('odd');
		if( $(this).is(':checked') )$('#results TR[gid="'+$(this).val()+'"]').show();
		else $('#results TR[gid="'+$(this).val()+'"]').hide();
		$('#results TR:visible:odd').addClass('odd');
	
		//hide/show markers
		for (var i = 0; i < markerGroups[$(this).val()].length; i++) {
			if( $(this).is(':checked') ) markerGroups[$(this).val()][i].show();
			else markerGroups[$(this).val()][i].hide();
		}
		
		//check/uncheck master when all others are similar
		if( $('.cfilter:checked').size() < 1 ) $('#master_control').attr('checked', false);
		if( $('.cfilter').size() == $('.cfilter:checked').size() ) $('#master_control').attr('checked', true);
	});
	
	$('#master_control').click( function(){
		//check/uncheck filter checkboxes
		if( $(this).is(':checked') ){
			$('.odd').removeClass('odd');
			$('.cfilter:enabled').attr('checked', true);
			$('#results TR').show();
			$('#results TR:visible:odd').addClass('odd');
		}else{
			$('.cfilter:enabled').attr('checked', false);
			$('#results TR').hide();
		}
		
		//hide/show markers
		for( x in markerGroups ){
			for( var i = 0; i < markerGroups[x].length; i++ ){
				var marker = markerGroups[x][i];
				if( $(this).is(':checked') ) marker.show();
				else marker.hide();
			}
		}
	});
	
});

	function load() {
		if (GBrowserIsCompatible()) {
		
			geocoder = new GClientGeocoder();
			map = new GMap2(document.getElementById('map'));
			map.addControl(new GSmallMapControl());
			map.addControl(new GMapTypeControl());
			map.setCenter(new GLatLng(40, -100), 4);
			
			var defaultURL = "/includes/geo/xml.php";
			if( window.location.search.indexOf('search-prox') > 0 ){
					geocoder.getLatLng(unescape(window.location.search.slice(13)), function(center) {
						//console.log(window.location.search.slice(13));
						if (!center){
							//console.log("Address not found");
						}else{	
							//console.log("Address found");
							defaultURL = '/includes/geo/xml_search.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=320';		
							GDownloadUrl(defaultURL, function(data) {
								var xml = '';
								xml = GXml.parse(data);
								var markers = xml.documentElement.getElementsByTagName("marker");
								for (var i = 0; i < markers.length; i++) {
									var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
														parseFloat(markers[i].getAttribute("lng")));
									
									var marker = createMarker(point, markers[i]);
									map.addOverlay(marker);
									
									createListItem(marker, markers[i]);
								}
								adjust_filters();
								$('#results TR:odd').addClass('odd');
								
								map.getInfoWindow();
							});
							$('INPUT[name="master_control"]').attr('checked',true);
							$('.txt_input').val('');

						}
					});
					
			}else{
				
				if( window.location.search.indexOf('search-text') > 0 )	defaultURL = '/includes/geo/xml_txt_search.php?qry=' + window.location.search.slice(13);
				
				GDownloadUrl(defaultURL, function(data) {
					var xml = '';
					xml = GXml.parse(data);
					markers = xml.documentElement.getElementsByTagName("marker");
					for (var i = 0; i < markers.length; i++) {
						var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
											parseFloat(markers[i].getAttribute("lng")));
						
						var marker = createMarker(point, markers[i]);
						map.addOverlay(marker);
						
						createListItem(marker, markers[i]);
					}
					adjust_filters();
					$('#results TR:odd').addClass('odd');
					
					map.getInfoWindow();
				});
				
				$('INPUT[name="master_control"]').attr('checked',true);
				$('.txt_input').val('');
			}
		}
	}

	function createMarker(point, center) {
				
		// determine icon color
		label = get_mGroup(center);
		
		if( center.getAttribute("centerID") != 1207 ) var marker = new GMarker(point, customIcons[label]);
		else var marker = new GMarker(point, customIcons["USA"]);
		
		//apply marker to group (for easy filtering)
		markerGroups[label].push(marker);
		
		var html = '<div class="sm_details"><h4>' + center.getAttribute("name") + '</h4>';
				html += '<div><em>' + center.getAttribute("typeName");
					if( center.getAttribute("genderName") ) html += ' (' + center.getAttribute("genderName") + ')';
					if( center.getAttribute("lengthName") ) html += ' - ' + center.getAttribute("lengthName");
				html += '</em></div>';
				html += '<div class="addy"><div>' + center.getAttribute("address") + '</div>';
					html += '<div>' + center.getAttribute("city") + ', ' + center.getAttribute("state") + ' ' + center.getAttribute("zip") + '</div>';
					html += '<div class="phone">' + center.getAttribute("phone") + '</div>';
				html += '</div>';
				if( center.getAttribute("weburl") ) html += '<a target="_blank" href="http://' + center.getAttribute("weburl") + '">' + center.getAttribute("weburl") + '</a><br/>';
				html += '<a target="_blank" href="mailto:' + center.getAttribute("email") + '">' + center.getAttribute("email") + '</a>';
				html += '<a class="donate" target="_blank" href="http://teenchallengeusa.com/donate/' + center.getAttribute("centerID") + '">donate to this center</a>';
			html += '</div>';
		//var html_max = center.getAttribute("address") + '<br/>';
		//	html_max += center.getAttribute("city") + ', ' + center.getAttribute("state") + ' ' + center.getAttribute("zip");
		
		GEvent.addListener(marker, 'click', function() {
			//marker.openInfoWindowHtml(html, {maxContent: "<div id='iw' cid='"+center.getAttribute("centerID")+"'>Loading...</div>", maxTitle: "<b>"+center.getAttribute("name")+"</b>"});
			
			//tabbed infowindow
			var tab1 = new GInfoWindowTab("Info", html);
			var tab2 = new GInfoWindowTab("Mini-map", '<div id="detailmap"></div>');
			var infoTabs = [tab1,tab2];
			
			marker.openInfoWindowTabsHtml(infoTabs);//, {maxContent: "<div id='iw' cid='"+center.getAttribute("centerID")+"'>Loading...</div>", maxTitle: "<b>"+center.getAttribute("name")+"</b>"});
			var dMapDiv = document.getElementById("detailmap");
			var detailMap = new GMap2(dMapDiv);
			detailMap.setCenter(point, 9);
			detailMap.addControl(new GSmallZoomControl());
			detailMap.addOverlay(new GMarker(point,{icon:marker.getIcon(), clickable:false}));
			
	 	});	
		return marker;
	}
	
    function createListItem(marker, center) {
		if( center.getAttribute("distance") == undefined ) d = '';
		else d = ' <sup>' + parseInt(center.getAttribute("distance")) + ' mi away</sup>';
		
		switch( center.getAttribute("type") ){
			case '7': gid = "A"; break;
			case '6': gid = "L"; break;
			case '5': gid = "I"; break;
			case '4': gid = "Y"; break;
			case '3': gid = "F"; break;
			case '2': gid = (center.getAttribute("gender")=="1" ? "B" : "G"); break;
			case '1': gid = (center.getAttribute("gender")=="1" ? "M" : "W"); break;
			default: gid = "x"; break;
		}
		var html = '<tr cid="'+center.getAttribute("centerID")+'" gid="'+gid+'" stateName="'+center.getAttribute("stateName")+'">';
				html += '<td class="right">' + center.getAttribute("state") + '</td>';
				html += '<td><img class="cIcon" src="' + marker.getIcon().image + '"/></td>';
				html += '<td><b>' + center.getAttribute("name") + '</b>' + d + '<br/>' +
							center.getAttribute("address") + '<br/>' +
							center.getAttribute("city") + ', ' + center.getAttribute("state") + ', ' + center.getAttribute("zip") +	'<br/>' +
							'<em>' + center.getAttribute("phone") + ' phone</em><br/>' + 
							'<em>' + center.getAttribute("fax") + ' fax</em>' + '</td>';
				html += '<td>';
				if( center.getAttribute("weburl") ) html += 'Website: <a target="_blank" href="http://' + center.getAttribute("weburl") + '">' + center.getAttribute("weburl") + '</a><br/>';
				if( center.getAttribute("email") ) html += 'Email: <a href="mailto:' + center.getAttribute("email") + '">' + center.getAttribute("email") + '</a><br/>';
				html += center.getAttribute("typeName");
				if( center.getAttribute("genderName") ) html += ' <em>(' + center.getAttribute("genderName") + ')</em>';
				if( center.getAttribute("lengthName") ) html += '<br/>' + center.getAttribute("lengthName");
				html += '</td>';
			html += '</tr>';
		$('TABLE#results').append(html);
		$('#results TR[cid="'+center.getAttribute("centerID")+'"]').click( function(){ GEvent.trigger(marker, 'click'); });
    }
	
	function adjust_filters(){
		for( i in markerGroups ){
			$('.filter[typeID="'+i+'"] SUP').remove();
			if(markerGroups[i].length>0){
				$('.cfilter[id="'+i+'"]').attr('checked',true);
				$('.cfilter[id="'+i+'"]').attr('disabled',false);
				$('.filter[typeID="'+i+'"]').removeClass('disabled');
				$('.filter[typeID="'+i+'"]').append('<sup>'+markerGroups[i].length+'</sup>');
			}else{
				$('.cfilter[id="'+i+'"]').attr('checked',false);
				$('.cfilter[id="'+i+'"]').attr('disabled',true);
				$('.filter[typeID="'+i+'"]').addClass('disabled');
			}
		}
	}
	
	function prx_search( address ){
		if(address==undefined) var address = document.getElementById('addressInput').value;
		geocoder.getLatLng(address, function(latlng) {
			if (!latlng) alert(address + ' not found');
			else searchLocationsNear(latlng);
		});
	}

	function searchLocationsNear(center) {
		var radius = document.getElementById('radiusSelect').value;
		var searchUrl = '/includes/geo/xml_search.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
		
		//empty array
		for( i in markerGroups ){ markerGroups[i] = []; }
		
		GDownloadUrl(searchUrl, function(data) {
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName('marker');
			map.clearOverlays();
			$('#results TR').remove();
			
			if (markers.length == 0) {
				alert( 'No results found.' );
				map.setCenter(new GLatLng(40, -100), 4);
				return;
			}
			
			var bounds = new GLatLngBounds();
			for (var i = 0; i < markers.length; i++) {
				//var centerID = markers[i].getAttribute('centerID');
				//var name = markers[i].getAttribute('name');
				//var distance = parseFloat(markers[i].getAttribute('distance'));
				//var address = markers[i].getAttribute('address') + " :: " + distance;
				//var type = markers[i].getAttribute('type');
				//var gender = markers[i].getAttribute("gender");
				var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lng')));
				
				var marker = createMarker(point, markers[i]);
				map.addOverlay(marker);
				
				createListItem(marker, markers[i]);
				
				bounds.extend(point);
			}
			map.setCenter(bounds.getCenter(), (map.getBoundsZoomLevel(bounds)>11 ? 11 : map.getBoundsZoomLevel(bounds)));
			adjust_filters();
			$('#results TR:odd').addClass('odd');
		});
		$('INPUT[name="master_control"]').attr('checked',true);
		$('#search-text').val('');
	}
	
	function txt_search() {
		var searchUrl = '/includes/geo/xml_txt_search.php?qry=' + $('#search-text').val();
		
		//empty array
		for( i in markerGroups ){ markerGroups[i] = []; }
		
		GDownloadUrl(searchUrl, function(data) {
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName('marker');
			map.clearOverlays();
			$('#results TR').remove();
			
			if (markers.length == 0) {
				alert( 'No results found.' );
				map.setCenter(new GLatLng(40, -100), 4);
				return;
			}
			
			var bounds = new GLatLngBounds();
				
			for (var i = 0; i < markers.length; i++) {
				//var centerID = markers[i].getAttribute('centerID');
				//var name = markers[i].getAttribute('name');
				//var address = markers[i].getAttribute('address') + " :: " + centerID;
				//var type = markers[i].getAttribute('type');
				//var gender = markers[i].getAttribute("gender");
				var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lng')));
				
				var marker = createMarker(point, markers[i]);
				map.addOverlay(marker);
				
				createListItem(marker, markers[i]);
				
				bounds.extend(point);
			}
			map.setCenter(bounds.getCenter(), (map.getBoundsZoomLevel(bounds)>11 ? 11 : map.getBoundsZoomLevel(bounds)));
			adjust_filters();
			$('#results TR:odd').addClass('odd');
		});
		$('INPUT[name="master_control"]').attr('checked',true);
		$('#addressInput').val('');
	}
    //]]>
