var showMembers = true;
var showNonMembers = true;
var lastClink = null;
var memberDlinks = new Array();
var nonMemberDlinks = new Array();

(function($) {
	// note: due to brain dumbing, "data" means "stuff that comes from category" and "info" is "stuff that comes from data".
	// or something along those lines.
	
	// data goes OUT of view
	$.dataOut = function() {
		$("#data_wrap").animate({ left: -370 });
	};
	
	// data comes IN to view
	$.dataIn = function() {
		$("#data_wrap").animate({ left: 0 });
	};
	
	$.bindDlinks = function () {
		$("#dwrap .dlink").bind("click",function() {			
			$.dataOut();
			var profileUrl = this.href;
			$("#iwrap #info_body").load(profileUrl);
			return false;
		});
		$.filterDlinks(); // filter members/non-members (and shuffle ordering)
	};
	
	function randOrd(){
		return (Math.round(Math.random())-0.5); } 
	
	$.filterDlinks = function () {
		memberDlinks = new Array();
		nonMemberDlinks = new Array();
		$('#dwrap ul li').each(function(){
			if($(this).hasClass('member')){
				$(this).click(function(){
					$('#iwrap #info_map').show();
				});
				memberDlinks.push($(this).detach());
			}else{
				$(this).click(function(){
					$('#iwrap #info_body .webAddress').hide();
					$('#iwrap #info_map').hide();
				});
				nonMemberDlinks.push($(this).detach());
			}
		});
		$.displayDlinks();
	};
	
	$.displayDlinks = function(){
		$('#dwrap ul').html('');
		var count = 0;
		if(showMembers){
			memberDlinks.sort(randOrd);
			$(memberDlinks).each(function(){
				$('#dwrap ul').append($(this).clone(true));
				count++;
			});			
		}
		if(showNonMembers){
			nonMemberDlinks.sort(randOrd);
			$(nonMemberDlinks).each(function(){
				$('#dwrap ul').append($(this).clone(true));
				count++;
			});
		}
		if(count == 0){
			$('#dwrap ul').append('<li>No Results Found</li>');
		}
	};
	
	$(function() {
		//Search box
		$("#member_search").keypress(function() {
			clearTimeout($('#member_search_tid').val());  //Clear timeout call	
			var tid = setTimeout(function() {
				///Run search and load
				$.dataIn();
				var search = $("#member_search").val();
				if ( search ) {
					var searchUrl = '/search?a=members&q=' + escape(search);
					$("#data_title").html('Search Results (loading...)');
					$("#dwrap").fadeOut("fast");					
					$("#dwrap").load(searchUrl,null, 
						function() {
							$("#data_title").html('Search Results');
							$.bindDlinks(); // bind freshly loaded links
							$("#dwrap").fadeIn("fast");
						}
					);
				}
			},1000);
			$('#member_search_tid').val(tid);			  //Set timeout id
		});
		
		//Filter box
		$('#memberFilterMembers').click(function(){
			showMembers = true;
			showNonMembers = false;
			$.displayDlinks();
		});
		$('#memberFilterNonMembers').click(function(){
			showMembers = false;
			showNonMembers = true;
			$.displayDlinks();
		});
		$('#memberFilterBoth').click(function(){
			showMembers = true;
			showNonMembers = true;
			$.displayDlinks();
		});

		// Category links
		$(".clink").each(function() {
			$(this).bind("click",function() {
				var $t = $(this);
				$.dataIn();
				$("#data_title").html($t.attr("name"));
				$("#dwrap").fadeOut("fast");
				var categoryProfilesUrl = this.href;
				$("#dwrap").load(categoryProfilesUrl,null, // start at substr(1) because first char is 'c'
					function() {
						$.bindDlinks(); // bind freshly loaded links
						$("#dwrap").fadeIn("fast");
					}
				);
				return false;
			});
		});
		
		// Profile links, to view profile info
		$.bindDlinks();
		
		// Google Maps Markers
		
		if ( ($.browser.msie && $.browser.version > 6) || !$.browser.msie ) {
			  //Initializes the google map
			  function initMap() {
			      if (GBrowserIsCompatible()) {
			      	//Map object
			    	m = new GMap2(document.getElementById('google_map'),{mapTypes:new Array(G_HYBRID_MAP)});
			    	var mapControl = new GMapTypeControl();
					m.addControl(mapControl);
					m.addControl(new GSmallMapControl());
			
					
			    	//Thing to look up addresses
			    	var geo = new GClientGeocoder();
//			    	var zoom = m.getBoundsZoomLevel(new GLatLngBounds(new GLatLng(laMin,loMin),new GLatLng(laMax,loMax)))-1;
				    m.setCenter(new GLatLng(0,0),13);
			    	
			    	//Look up addresses and take action
			    	$.get('/directory/profiles',{},function(xh,s) {
			    		var limit = 6;	//Max number of lookups per instance
			    		
			    		$('xml member',xh).each(function() {
			    			var addy = $('address',$(this)).text();
			    			var name = $('name',$(this)).text();
			    			var cid = $('contact_id',$(this)).text();
			    			var phone = $('phone',$(this)).text();
			    			var lat = $('latitude',$(this)).text();
			    			var lng = $('longitude',$(this)).text();
			    			
			    			// See if latitude and longitude are specified
			    			if ( lat.length > 0 && lng.length > 0) {
			    				//grab from cache
					    		var mark = new GMarker(new GLatLng(lat,lng));
					    		//Click to show info
					    		m.addOverlay(mark);
						    		
						 	} else {
			    				//Else, try to look it up
			    				if ( limit > 0 ) {
				    			//Get and set marker
							    	geo.getLatLng(addy,function(pnt) {							    		
							    		if ( pnt ) {
							    			//Show it
							    			var mark = new GMarker(pnt);
							    			m.addOverlay(mark);							    			
							    		}
							    		
							    	});
							    	limit--;	
						    	}
					    	}
				    	});
			    	});
			    }
			    }
			    
			   $(document).ready(initMap);
			   $(document).ready(function() {
			   	$('.clink:eq(0)').click();
			   });
		   } else {
		   		$('#google_map').html($('#google_map_nosupport').html());
		   }
	});
	
})(jQuery);