	var gLocalSearch;
   var gSelectedResults = [];
   var gCurrentResults = [];
	var map;
	var geocoder = new GClientGeocoder();
	var u = 0;
	var gmarkers = [];
	var htmls = [];
	var moves = 0;
	var disableauto = 0;
	var allLawyersDiv;
	var NoNonProfitsDiv;
	var NonProfitsOnlyDiv;
	var GoogleResultsDiv;
	var GoogleResultsContents;
	var googlemarkersnum = 0;
	var gmarkerhtmls = [];
	var laststate;
	var clickmarker = '';
	var searchpoint;
	var curlocstring = '';
	var resultscont = '';
	var ajarescnt = 0;
	var iwincuropen = 0;
	var needpointreset = 0;

	var smallbaseicon = new GIcon();
	smallbaseicon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	smallbaseicon.iconSize = new GSize(12, 20);
	smallbaseicon.shadowSize = new GSize(22, 20);
	smallbaseicon.iconAnchor = new GPoint(6, 20);
	smallbaseicon.infoWindowAnchor = new GPoint(5, 1);

	var hearticon = new GIcon();
	hearticon.shadow = "http://lawyers.justia.com/images/mapicons/heart/shadow.png";
	hearticon.iconSize = new GSize(28,28);
	hearticon.shadowSize = new GSize(43,28);
	hearticon.iconAnchor = new GPoint(14.0, 14.0);
	hearticon.infoWindowAnchor = new GPoint(14.0,14.0);

	var largetearicon = new GIcon();
	largetearicon.shadow = "http://lawyers.justia.com/images/mapicons/largetear/shadow50.png";
	largetearicon.iconSize = new GSize(20,34);
	largetearicon.shadowSize = new GSize(37,34);
	largetearicon.iconAnchor = new GPoint(9,34);
	largetearicon.infoWindowAnchor = new GPoint(9,2);
	largetearicon.infoShadowAnchor = new GPoint(18,25);

	var loadbarimg = document.createElement("img");
	loadbarimg.src = "http://lawyers.justia.com/images/barload.gif";

	var chicon = new GIcon();
	chicon.shadow = "";
	chicon.image = "http://lawyers.justia.com/images/crosshairs.gif";
	chicon.iconSize = new GSize(19,19);
	chicon.shadowSize = new GSize(0,0);
	chicon.iconAnchor = new GPoint(9,9);
	chicon.infoWindowAnchor = new GPoint(9,9);
	
	var loadicon = new GIcon();
	loadicon.shadow = "";
	loadicon.image = "http://lawyers.justia.com/images/loadindicator.gif";
	loadicon.iconSize = new GSize(32,32);
	loadicon.iconAnchor = new GPoint(16,16);
	loadicon.infoWindowAnchor = new GPoint(16,16);
	
	var gloadicon = new GIcon(loadicon);
	gloadicon.image = "http://lawyers.justia.com/images/gloadindicator.gif";
	
	var iconblue = new GIcon(smallbaseicon);
	iconblue.image = "http://labs.google.com/ridefinder/images/mm_20_blue.png";
	var iconwhite = new GIcon(smallbaseicon);
	iconwhite.image = "http://labs.google.com/ridefinder/images/mm_20_white.png";
	var iconred = new GIcon(smallbaseicon);
	iconred.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
	var iconyellow = new GIcon(smallbaseicon);
	iconyellow.image = "http://labs.google.com/ridefinder/images/mm_20_yellow.png";

function showloadbar() {
	document.getElementById("resultsdesc").innerHTML = '';
	document.getElementById("resultsdesc").appendChild(loadbarimg);
}

toRad = function(x) {
	return x * Math.PI / 180;
}

function createicon_heart(num) {
	var icon = new GIcon(hearticon);
	icon.image = "http://lawyers.justia.com/images/mapicons/heart/"+num+".png";
	return icon;
}

	
	function myclick(marker,i) {
		disableauto = 1;
		setTimeout("disableauto = 0",2000);
		
		marker.openInfoWindowHtml(htmls[i]);
	}

	function createMarker(point,name,html,memtype,selector,iconclass,iconimage) {
		
		if (iconclass == "hearticon") {
			var icon = new GIcon(hearticon);
		} else if (iconclass == "largetearicon") {
			var icon = new GIcon(largetearicon);
		} else {
			var icon = new GIcon(smallbaseicon);
		}
		icon.image = iconimage;
		gmarkers[selector] = new GMarker(point,icon);
		
		GEvent.addListener(gmarkers[selector],"click",function() {
			gmarkers[selector].openInfoWindowHtml(html);
		});
		
		htmls[selector] = html;
		return gmarkers[selector];
	}
	
	function fetchpoints() {
		var dosearch = practicearea+searchquery;
		if (disableauto == 0 && iwincuropen == 0) {
			needpointreset = 1;
			resultscont = '';
			showloadbar();
			var bounds = map.getBounds();
			var southWest = bounds.getSouthWest();
			var northEast = bounds.getNorthEast();
			var tlat = northEast.lat();
			var blat = southWest.lat();
			var llon = southWest.lng();
			var rlon = northEast.lng();
			Set_Cookie("savedpoint[zoom]",map.getZoom(),60,"/",".justia.com");
			centerpoint = map.getCenter();
					
			var geturl = "http://lawyers.justia.com/jsonsearch?tlat="+tlat+"&blat="+blat+"&llon="+llon+"&rlon="+rlon+"&lawyerset="+lawyerset;
			
			if (practicearea.length > 0) {
				geturl += "&practice="+practicearea;
			}
			
			if (searchquery.length > 0) {
				geturl += "&query="+searchquery;
			}
			
			if (centerpoint.lat() == startcenterpoint.lat() && centerpoint.lng() == startcenterpoint.lng()) {
				geturl = geturl + "&keeppoint=yes";
			}
			
			document.searchbox_cref.cref.value = "http://lawyers.justia.com/createcse?practice="+practicearea+"&searchquery="+searchquery+"&tlat="+tlat+"&blat="+blat+"&llon="+llon+"&rlon="+rlon+"&lawyerset="+lawyerset;
			ajarescnt = 0;
			if (dosearch.length > 0) {
				gLocalSearch = new GlocalSearch();
				gLocalSearch.setCenterPoint(centerpoint);
				gLocalSearch.setSearchCompleteCallback(null, OnLocalSearch);
				gLocalSearch.setResultSetSize(GSearch.LARGE_RESULTSET);
				gLocalSearch.setNoHtmlGeneration();
				// Execute the initial search
				//gLocalSearch.execute(gsearchphrase);
			}
			GDownloadUrl(geturl,function(data,responseCode) { doresultsmain(data,responseCode); });


		}
	}


	function startfetchpoints() {
		var dosearch = practicearea+searchquery;
		if (disableauto == 0 && iwincuropen == 0) {
			needpointreset = 1;
			resultscont = '';
			showloadbar();
			var bounds = map.getBounds();
			var southWest = bounds.getSouthWest();
			var northEast = bounds.getNorthEast();
			var tlat = northEast.lat();
			var blat = southWest.lat();
			var llon = southWest.lng();
			var rlon = northEast.lng();
			Set_Cookie("savedpoint[zoom]",map.getZoom(),60,"/",".justia.com");
			centerpoint = map.getCenter();
					
			var geturl = "http://lawyers.justia.com/jsonsearch?tlat="+tlat+"&blat="+blat+"&llon="+llon+"&rlon="+rlon+"&lawyerset="+lawyerset;
			
			if (practicearea.length > 0) {
				geturl += "&practice="+practicearea;
			}
			
			if (searchquery.length > 0) {
				geturl += "&query="+searchquery;
			}
			
			if (centerpoint.lat() == startcenterpoint.lat() && centerpoint.lng() == startcenterpoint.lng()) {
				geturl = geturl + "&keeppoint=yes";
			}
			
			if (statemode == 1) {
				geturl += "&statemode=yes";
			}
			//alert(geturl);
			document.searchbox_cref.cref.value = "http://lawyers.justia.com/createcse?practice="+practicearea+"&searchquery="+searchquery+"&tlat="+tlat+"&blat="+blat+"&llon="+llon+"&rlon="+rlon+"&lawyerset="+lawyerset;
			ajarescnt = 0;
			if (dosearch.length > 0) {
				gLocalSearch = new GlocalSearch();
				gLocalSearch.setCenterPoint(centerpoint);
				gLocalSearch.setSearchCompleteCallback(null, OnLocalSearch);
				gLocalSearch.setResultSetSize(GSearch.LARGE_RESULTSET);
				gLocalSearch.setNoHtmlGeneration();
				// Execute the initial search
				//gLocalSearch.execute(gsearchphrase);
			}
			GDownloadUrl(geturl,function(data,responseCode) { doresultsmain(data,responseCode); });


		}
	}

	function doresultsmain (data,responseCode) {
		var jsonData = eval('('+data+')');
		u = 0;
		gmarkers = [];
		htmls = [];
		if (laststate != jsonData.state) {
			laststate = jsonData.state;
		}
		document.title = jsonData.pagetitle;
		document.getElementById("resultsdesc").innerHTML = jsonData.resultsdescr;
		if (jsonData.markers.length > 0) {
			if (needpointreset == 1) {
				needpointreset = 0;
				map.clearOverlays();
				resultscont = '';
			}
			moves++;
			if (moves > 2) {
				moves = 0;
			}
			for (var i = 0; i < jsonData.markers.length; i++) {
				var marker = createMarker(new GLatLng(jsonData.markers[i].latitude,jsonData.markers[i].longitude),jsonData.markers[i].firmname,jsonData.markers[i].description,jsonData.markers[i].membership,jsonData.markers[i].pointid,jsonData.markers[i].iconclass,jsonData.markers[i].icon);
				map.addOverlay(marker);
			}
			document.getElementById("csesearchbox").style.display = "block";
		} else {
			document.getElementById("csesearchbox").style.display = "none";
		}
		document.searchform.location.value = jsonData.locstring;
		if (centerpoint.lat() != startcenterpoint.lat() || centerpoint.lng() != startcenterpoint.lng()) {
			document.getElementById("breadcrumbs").innerHTML = jsonData.crumbs;
			curlocstring = jsonData.locstring;
			document.getElementById("locboxheadname").innerHTML = curlocstring;
		}
		ajarescnt++;
		document.getElementById("resultsdisplay").innerHTML = jsonData.results;
		document.getElementById("farresultsdisplay").innerHTML = jsonData.farresults;
	}
	
	function loadMap(resmode) {
		map = new GMap2(document.getElementById("resultmap"));
		map.setCenter(centerpoint,zoomlevel);
		setTimeout("map.addControl(new GSmallZoomControl())",700);
		setTimeout("delayedmapfuncs()",800);
		
		GEvent.addListener(map,"click",function(marker, point) {
		if (marker) {
			map.panTo(marker);
		} else {
			map.panTo(point);
		}
		});
		if (resmode == 1) {
		
		} else {
			startfetchpoints();
		}		
	}

	function delayedmapfuncs() {
		GEvent.addListener(map,'moveend',function() { fetchpoints(); });
		GEvent.addListener(map,"infowindowopen",function() { iwincuropen = 1; });
		GEvent.addListener(map,"infowindowclose",function() { iwincuropen = 0; });
	}



function jsdist (lat1,lon1,lat2,lon2) {
	var R = 6371; 
	var dLat = toRad(lat2-lat1);
	var dLon = toRad(lon2-lon1); 
	var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
			  Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * 
			  Math.sin(dLon/2) * Math.sin(dLon/2); 
	var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
	var d = R * c;
	d = parseFloat(d/1.609);
	return d.toFixed(2);
}

function mapmodelink () {
	var modelink = document.createElement("div");
	
}

    // A class representing a single Local Search result returned by the
    // Google AJAX Search API.
    function LocalResult(result,id) {
      this.result_ = result;
      this.resultNode_ = this.unselectedHtml();
      var curmarker = this.marker(iconwhite);
      map.addOverlay(curmarker);

		var oddeven = "odd";
		if ((id + 1) % 2 == 0) { oddeven = "even"; }      

		var dst = jsdist(searchpoint.lat(),searchpoint.lng(),this.result_.lat,this.result_.lng);

		var html = '';
		
		html += '<div class="oneresult result-'+oddeven+'">';
		html += '<div class="gprofilelink"><a href="'+this.result_.url+'" target="_blank">Google Profile</a></div>';
		html += '<div class="profilelink"><a href="'+this.result_.url+'" target="_blank">'+this.result_.titleNoFormatting+'</a></div>';
		html += '<div class="addresses">';
		html += '<div class="address"><a href="#" onclick="gCurrentResults['+id+'].doclick();" title="show on map"><img src="http://labs.google.com/ridefinder/images/mm_20_white.png" alt="show on map" border="0" align="left" /></a>';
		html += '<span>'+this.result_.streetAddress + ", " + this.result_.city+ ", " + this.result_.region + ' <span class="distance">(' + dst + ' miles)</span></span></div>';
		html += '</div>';
		html += '</div>';
		
      gmarkerhtmls[id] = this.unselectedHtml;
      GoogleResultsContents.innerHTML = GoogleResultsContents.innerHTML + html;
    }

    LocalResult.prototype.marker = function(opt_icon) {
      if (this.marker_) return this.marker_;
      var marker = new GMarker(new GLatLng(parseFloat(this.result_.lat),
                                         parseFloat(this.result_.lng)),
                               opt_icon);
      GEvent.bind(marker, "click", this, function() {
        disableauto = 1;
        setTimeout("disableauto = 0",2000);
        marker.openInfoWindow(this.unselectedHtml());
      });
      this.marker_ = marker;
      return marker;
    }

		LocalResult.prototype.doclick = function() {
			var marker = this.marker();
			marker.openInfoWindow(this.unselectedHtml());
		}

    LocalResult.prototype.unselectedHtml = function() {
    	var baloon = document.createElement("div");
    	baloon.className = "infobaloon";
    	var baloon2 = document.createElement("h3");
    	baloon2.innerHTML = "Google Search Results";
    	//baloon.appendChild(baloon2);
    	var baloon3 = document.createElement("h4");
    	var baloon3a = document.createElement("a");
    	baloon3a.href=this.result_.url;
    	baloon3a.target="_blank";
    	baloon3a.innerHTML=this.result_.titleNoFormatting;
    	baloon3.appendChild(baloon3a);
    	baloon.appendChild(baloon3);    	
    	
      var theaddress = document.createElement("div");
		theaddress.className = "address";
      theaddress.innerHTML = this.result_.streetAddress + "<br />" + this.result_.city+ ", " + this.result_.region;
		baloon.appendChild(theaddress);
		
    	var GoogleBrand = document.createElement("div");
    	GSearch.getBranding(GoogleBrand);
    	baloon.appendChild(GoogleBrand);

      return baloon;
    }

	function updatelocation() {
		currentlocation = document.getElementById("locationsearchbox").value;
		
		showloadbar();
		var geturl = "/jsonloc?location="+window.escape(currentlocation);
		fpenabled = false;
		GDownloadUrl(geturl,function(data,responseCode) {
			var jsonData = eval('('+data+')');
			currentlocation = jsonData.locstring;
			centerpoint = new GLatLng(jsonData.latitude,jsonData.longitude);
			map.panTo(centerpoint);
		});	
	}

    function OnLocalSearch() {
    	searchpoint = map.getCenter();
      if (!gLocalSearch.results) return;	
      for (var i = 0; i < gCurrentResults.length; i++) {
          map.removeOverlay(gCurrentResults[i].marker());
      }
		googlemarkersnum = 0;
		gmarkerhtmls = [];
		
		if (needpointreset == 1) {
			needpointreset = 0;
			map.clearOverlays();
			resultscont = '';
		}
		
		
		GoogleResultsDiv = document.createElement("div");
		
		var div0 = document.createElement("div");
		div0.className = "fragment";
		
		var div1 = document.createElement("div");
		div1.className = "fragwrap";
		
		var div2 = document.createElement("div");
		div2.className = "fragwrapinner";
		
		var div3 = document.createElement("div");
		div3.className = "fragheader";
		
		var div4 = document.createElement("div");
		div4.className = "fragcontent";
		
		var GoogleResultsHeader = document.createElement("h3");
		
		
		GoogleResultsContents = document.createElement("div");
		GoogleResultsContents.className = "listings-google";
		
		var GoogleBrand = document.createElement("div");
		GSearch.getBranding(GoogleBrand);
		GoogleBrand.style.display = "block";
		GoogleResultsHeader.innerHTML = "Google Local Results";
		GoogleResultsHeader.style.display = "inline";
		GoogleResultsHeader.className = "grhh3";
		
		var div5 = document.createElement("div");
		div5.className = "googlebrandbox";

		div5.appendChild(GoogleBrand);
		div3.appendChild(div5);
		div3.appendChild(GoogleResultsHeader);
		
		var grdiv = document.createElement("div");
		
		
		var attribution = gLocalSearch.getAttribution();
		if (attribution) {
			var atribdiv = document.createElement("div");
			atribdiv.style.marginBottom = "10px";
			atribdiv.appendChild(attribution);
		  	grdiv.appendChild(atribdiv);
		}
		
		
      gCurrentResults = [];
      for (var i = 0; i < gLocalSearch.results.length; i++) {
        gCurrentResults[i] = new LocalResult(gLocalSearch.results[i],i);
      }
      
      if (gLocalSearch.results.length < 1) {
      	GoogleResultsContents.innerHTML = "No Local Results";
      }
      
      GoogleResultsContents.innerHTML = '<div class="grestable">'+GoogleResultsContents.innerHTML+'</div>';
            
      grdiv.appendChild(GoogleResultsContents);
      
      div2.appendChild(div3);
      div4.appendChild(grdiv);
      div2.appendChild(div4);
      div1.appendChild(div2);
      div0.appendChild(div1);
      GoogleResultsDiv.appendChild(div0);
      
      
      
		document.getElementById("googlelocalresults").innerHTML = GoogleResultsDiv.innerHTML;
		ajarescnt++;
		
    }
    
    

	
	function updatesearchajax() {
		var geturl = "http://lawyers.justia.com/jsonsearch?practice="+practiceara+"&query="+window.escape(document.searchform.q.value)+"&lawyerset="+lawyerset;
		
		showloadbar();
		resultscont = '';
		
		if (curlocstring != document.searchform.location.value) {
			geturl += "&location="+window.escape(document.searchform.location.value);
			currentlocation = document.getElementById("lbox").value;
			searchquery = document.searchform.q.value;
			showloadbar();
			gsearchphrase = "("+searchquery+") category:attorneys";
			var geturl2 = "/jsonloc?location="+window.escape(currentlocation);
			fpenabled = false;
			setTimeout(function() {
			GDownloadUrl(geturl2,function(data,responseCode) {
				var jsonData = eval('('+data+')');
				currentlocation = jsonData.locstring;
				centerpoint = new GLatLng(jsonData.latitude,jsonData.longitude);
				map.panTo(centerpoint);
				setTimeout("fpenabled = true;",600);
				fetchpoints();
			});},300);
			return false;
		} else {
			var bounds = map.getBounds();
			var southWest = bounds.getSouthWest();
			var northEast = bounds.getNorthEast();
			var tlat = northEast.lat();
			var blat = southWest.lat();
			var llon = southWest.lng();
			var rlon = northEast.lng();
			geturl += "&tlat="+tlat+"&blat="+blat+"&llon="+llon+"&rlon="+rlon;
			document.searchbox_cref.cref.value = "http://lawyers.justia.com/createcse?practice="+practicearea+"&searchquery="+searchquery+"&tlat="+tlat+"&blat="+blat+"&llon="+llon+"&rlon="+rlon+"&lawyerset="+lawyerset;
			ajarescnt = 0;
			gLocalSearch = new GlocalSearch();
			gLocalSearch.setCenterPoint(centerpoint);
			gLocalSearch.setSearchCompleteCallback(null, OnLocalSearch);
			gLocalSearch.setResultSetSize(GSearch.LARGE_RESULTSET);
			gLocalSearch.setNoHtmlGeneration();
			// Execute the initial search
			//gLocalSearch.execute(gsearchphrase);
			setTimeout(function() {GDownloadUrl(geturl,function(data,responseCode) { doresultsmain(data,responseCode); });},600);
			return false;
		}
		
	}
	
var changetaburl = location.href;

function changemapmode (mode) {
	Set_Cookie("ldmapmode",mode,60,"/",".justia.com");
	if (changetaburl == location.href) {
		location.reload(true);
	} else {
		location.href = changetaburl;
	}
}

function Set_Cookie( name, value, expires, path, domain, secure ) 
{
// set time, it's in milliseconds
var today = new Date();
today.setTime( today.getTime() );

/*
if the expires variable is set, make the correct 
expires time, the current script below will set 
it for x number of days, to make it for hours, 
delete * 24, for minutes, delete * 60 * 24
*/
if ( expires )
{
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );

document.cookie = name + "=" +escape( value ) +
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + 
( ( path ) ? ";path=" + path : "" ) + 
( ( domain ) ? ";domain=" + domain : "" ) +
( ( secure ) ? ";secure" : "" );
}