var default_center;//=new GLatLng(38.648056, -90.212222);
var map;
var center;
var radius;
var bpoints;
var markers;
var detailEvent="mouseover";

function generateIconArrow()
{
	//Create custom marker icon
	var icon = new GIcon(G_DEFAULT_ICON);
	icon.image = QBS_base_url+"graphics/markers/redArrow.gif";
	icon.shadow = QBS_base_url+"graphics/markers/mapArrowShadow.png";
	icon.iconSize = new GSize(20, 34);
	icon.shadowSize = new GSize(40, 34);
	icon.iconAnchor = new GPoint(9, 34);
	icon.infoWindowAnchor = new GPoint(10, 5);
	
	return icon;
}

function generateIcon()
{
	//Create custom marker icon
	var icon = new GIcon(G_DEFAULT_ICON);
	icon.image = QBS_base_url+"graphics/markers/mapIcon.png";
	icon.shadow = QBS_base_url+"graphics/markers/mapIconShadow2.png";
	icon.iconSize = new GSize(30, 30);
	icon.shadowSize = new GSize(49, 32);
	icon.iconAnchor = new GPoint(0, 30);
	icon.infoWindowAnchor = new GPoint(15, 15);
	
	return icon;
}

function createMarker(point, cicon)
{
	var marker = new GMarker(point, cicon);
	return marker;
}

function createMarkerStreetView(point, cicon, parentDivName)
{
	var marker = new GMarker(point, cicon);
	GEvent.addListener(marker, detailEvent, function () { getStreetView(parentDivName, point); });
	return marker;
}

function createMarkerWithDataTabs(point, icon, index)
{
	var gll=new GLatLng(point[0],point[1]);
	var marker = new GMarker(gll,icon);
	var atabs=new Array();
	GEvent.addListener(marker, detailEvent, function() {
		atabs[0]=new GInfoWindowTab("Details", tabs[index][0]);//, onClick)
		atabs[1]=new GInfoWindowTab("Pictures", tabs[index][1]);//, onClick)
		marker.openInfoWindowTabsHtml(atabs);
	});
	return marker;
}

function createMarkerWithData(point, icon)
{
	var gll=new GLatLng(point[0],point[1]);
	var marker = new GMarker(gll,icon);
	var atabs=new Array();
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(point[2], {maxWidth:300} );
	});
	GEvent.addListener(marker, "mouseover", function() {
		//tInfo=setInterval(delayedOpen,250,marker, point[2], {maxWidth:300});
		tMarker=marker;
		tData=point[2];
		tInfo=window.setInterval(delayedOpen,250);
	});
	GEvent.addListener(marker, "mouseout", function() {
		endDelayedOpen();
	});
	return marker;
}

var tInfo=null;
var tMarker=null;
var tData=null;

function delayedOpen(marker, arg1)
{
	if(tInfo)
	{
		endDelayedOpen();
	}
	//marker.openInfoWindowHtml(arg1, {maxWidth:300});
	tMarker.openInfoWindowHtml(tData, {maxWidth:300});
}

function endDelayedOpen()
{
	if(tInfo)
		clearInterval(tInfo);
}

function createEditMarker(point, cicon)
{
	var marker = new GMarker(point, {icon: cicon, draggable: true});
	//var marker = new GMarker(point, cicon);
	GEvent.addListener(marker, "dragend", function() {
		var f=document.getElementById("admin_edit_form");
		var np=marker.getPoint();
		f.latitude.value=np.lat();
		f.longitude.value=np.lng();
	});
	return marker;
}

var polygon=null;

function createEditMarkerBorders()
{
	if(border_type && border_type=="Polygon")
	{
	}
	else//Radius
	{
		var marker = new GMarker(
			new GLatLng(center["lat"],center["lng"]),
			{draggable: true}
		);
		GEvent.addListener(
			marker,
			"dragend", 
			function () { setCenterPoint(marker) }
		);
		map.addOverlay(marker);

	}
	setBorder();
	//return marker;
	return;
}

function setCenterPoint(marker)
{
	var point=marker.getPoint();
	var f=document.getElementById("admin_edit_form");
	
	var lat=f.latitude;
	var lng=f.longitude;
	
	lat.value=point.lat();
	lng.value=point.lng();
	
	setBorder(null, lat.value, lng.value);
}

function setPolygonPoints()
{
	var f=document.getElementById("admin_edit_form");
	var lats=f.elements["lat[]"];
	var lngs=f.elements["lng[]"];
	if(lats)
	{
		while(lats.length)
		{
			f.removeChild(lats[0]);
			lats=f.elements["lat[]"];
		}
		f.removeChild(lats);
	}
	if(lngs)
	{
		while(lngs.length)
		{
			f.removeChild(lngs[0]);
			lngs=f.elements["lng[]"];
		}
		f.removeChild(lngs);
	}
	
	var cnt=polygon.getVertexCount();
	for(var i=0;i<(cnt-1);i++)
	{
		var point=polygon.getVertex(i);
		
		lat=document.createElement("input");
		lat.setAttribute("type","hidden");
		lat.setAttribute("name","lat[]");
		lat.setAttribute("value",point.lat());
		f.appendChild(lat);
		
		lng=document.createElement("input");
		lng.setAttribute("type","hidden");
		lng.setAttribute("name","lng[]");
		lng.setAttribute("value",point.lng());
		f.appendChild(lng);
	}
	var center=polygon.getBounds().getCenter();
	/*lat=f.latitude;
	lng=f.longitude;
	lat.value=center.lat();
	lng.value=center.lng();*/
}

function setBorder()
{
	if(polygon)
	{
		map.removeOverlay(polygon);
		polygon=null;
	}
	
	var cpoints=new Array();
	if(border_type=="Polygon")
	{
		for(var i=0;i<bpoints.length;i++)
		{
			cpoints[i]=new GLatLng(bpoints[i]['lat'], bpoints[i]['lng']);
		}
		cpoints[i]=cpoints[0];
		polygon = new GPolygon(cpoints, "#ff0000", 5, 0, "#00cc00", 0.375);
		map.addOverlay(polygon);
		if(i<3)
			polygon.enableDrawing();
		else
			polygon.enableEditing();
		GEvent.addListener(
			polygon,
			"endline", 
			function () { polygon.disableEditing(); polygon.enableEditing(); }
		);
		GEvent.addListener(
			polygon,
			"lineupdated", 
			function () { setPolygonPoints(); }
		);
	}
	else//Radius
	{
		var f=document.getElementById("admin_edit_form");	
		
		var lat=f.latitude.value;
		var lng=f.longitude.value;
		var d=f.radius.value;
		
		with (Math)
		{
			var ctr=0;
			dl=d/69.047;
			for(var w=0;w<2*PI;w+=0.25)
			{
				x=cos(w)*dl+parseFloat(lat);
				y=sin(w)*dl*1.5+parseFloat(lng);
				cpoints[ctr++]=new GLatLng(x,y);
			}
			cpoints[ctr++]=cpoints[0];
		}
		polygon = new GPolygon(cpoints, "#ff0000", 5, 0, "#00cc00", 0.375);
		map.addOverlay(polygon);
	}
	//return marker;
	return;
}

var cityPolygons=new Array();
var markPolygons=new Array();

function loadCityPolygons()
{
	var cpoints;

	for(var j=0;j<pcities.length;j++)
	{
		cpoints=new Array();
		for(var i=0;i<pcities[j].length;i++)
		{
			cpoints[i]=new GLatLng(pcities[j][i]['lat'], pcities[j][i]['lng']);
		}
		cpoints[i]=cpoints[0];
		polygon = new GPolygon(cpoints, "#ff0000", 1, 1, "#ff0000", 0.625);
		cityPolygons[pcitymap[j]]=polygon;
		
		/*
		GEvent.addListener(
			polygon,
			"mouseover", 
			//function () { hiliteCity(pcitymap[j]); $('search_city_home').value=pcitymap[j]; }
			polyMO(pcitymap[j])
		);
		
		GEvent.addListener(
			polygon,
			"mouseout", 
			function () { unHiliteCity(); }
		);
		
		GEvent.addListener(
			polygon,
			"click", 
			polyClick(pcitymap[j])
		);
		
		map.addOverlay(polygon);
		*/
	}

	for(var j=0;j<pmarks.length;j++)
	{
		if(pmarks[j])
		{
			cpoints=new Array();
			var lat=parseFloat(pmarks[j]['lat']);
			var lng=parseFloat(pmarks[j]['lng']);
			var d=pmarks[j]['radius'];
			
			with (Math)
			{
				var ctr=0;
				dl=d/69.047;
				for(var w=0;w<2*PI;w+=0.25)
				{
					x=cos(w)*dl+lat;
					y=sin(w)*dl*1.5+lng;
					cpoints[ctr++]=new GLatLng(x,y);
				}
				cpoints[ctr++]=cpoints[0];
			}
			//map.addOverlay(createMarker(new GLatLng(lat, lng), null));
			polygon = new GPolygon(cpoints, "#ff0000", 1, 1, "#ff0000", 0.625);
			markPolygons[j]=polygon;
			//map.addOverlay(polygon);
		}
	}

	return;
}

var pLit=null;

function polyMO(pname)
{
	return function () {
		hiliteCity(pname);
		var e=$('search_city_home'+pname);
		scrollIntoView(e);
	};
}
function polyClick(pname)
{
	return function () {
		var e=$("homeSearchForm");
		e.search_city.value=pname;
		e.submit();
	};
}

function scrollIntoView(node) {
	var parent = node.parentNode;
	var parentCHeight = parent.clientHeight;
	var parentSHeight = parent.scrollHeight;
	if (parentSHeight > parentCHeight) {
		var nodeHeight = node.clientHeight;
		var nodeOffset = node.offsetTop;
		var scrollOffset = nodeOffset + (nodeHeight / 2) - (parentCHeight / 2);
		parent.scrollTop = scrollOffset;
	}
	if (parent.parent) {
		scrollIntoView(parent);
	}
}

function unHiliteList()
{
	var e=$$('#search_city_home DIV');
	for(var i=0;i<e.length;i++)
	{
		var s=e[i];
		s=s.style;
		s.backgroundColor="#fff";
		s.color="#192088"
	}
}

function unHiliteMarkList()
{
	var e=$$('#search_landmarks_home DIV');
	for(var i=0;i<e.length;i++)
	{
		var s=e[i];
		s=s.style;
		s.backgroundColor="#fff";
		s.color="#192088"
	}
}

var markLit=null;

function hiliteLandmark(lid)
{
	unHiliteMarkList();
	var e=$('search_landmarks_home'+lid);
	e.style.backgroundColor="#192088";
	e.style.color="#fff";
	if(markLit)
	{
		map.removeOverlay(markLit);
	}
	markLit=markPolygons[lid];
	map.addOverlay(markPolygons[lid]);
}

function hiliteCity(ctext)
{
	unHiliteCity();
	unHiliteList();
	var e=$('search_city_home'+ctext);
	e.style.backgroundColor="#192088";
	e.style.color="#fff";
	if(cityPolygons[ctext])
	{
		//console.log(opt.value);
		/*cityPolygons[ctext].setFillStyle({
			color: '#ff0000',
			opacity: 0.625
		});*/
		map.addOverlay(cityPolygons[ctext]);
		pLit=cityPolygons[ctext];
	}
}

function unHiliteCity()
{
	if(pLit)
	{
		/*pLit.setFillStyle({
			color: '#00cc00',
			opacity: 0.375
		});*/
		map.removeOverlay(pLit);
	}
}

function changeLocation()
{
	new Effect.BlindDown("searchParamsLocation");
	new Effect.BlindUp("searchParamsLocationSelected");
}

function loadMapSinglePoint(divname, lat, lng)
{
	if (GBrowserIsCompatible())
	{
		map = new GMap2(document.getElementById(divname));
		map.addControl(new GLargeMapControl());
		map.addControl(new GOverviewMapControl());
		map.addControl(new GMapTypeControl(G_ANCHOR_TOP_RIGHT));
		//map.setMapType(G_PHYSICAL_MAP);
		var center;
		if (lat && lng)
			center=new GLatLng(lat, lng);
		else if (default_center)
			center=default_center;
		else
			center=new GLatLng(36.643611, -93.218333);
		map.setCenter(center, 16);

		//map.addOverlay(createMarkerStreetView(center, generateIcon(), divname));
		map.addOverlay(createMarker(center, generateIcon()));
	}
}

function loadMapOnly(divname, lat, lng)
{
	if (GBrowserIsCompatible())
	{
		map = new GMap2(document.getElementById(divname));
		map.addControl(new GLargeMapControl());
		map.addControl(new GOverviewMapControl());
		map.addControl(new GMapTypeControl(G_ANCHOR_TOP_RIGHT));
		//map.setMapType(G_PHYSICAL_MAP);
		var center;
		if (lat && lng)
			center=new GLatLng(lat, lng);
		else if (default_center)
			center=default_center;
		else
			center=new GLatLng(36.643611, -93.218333);
		map.setCenter(center, 12);
	}
}

function loadMapManyPoints(divname, lat, lng, zoom)
{
	if (GBrowserIsCompatible())
	{
		map = new GMap2(document.getElementById(divname));
		map.addControl(new GLargeMapControl());
		map.addControl(new GOverviewMapControl());
		map.addControl(new GMapTypeControl(G_ANCHOR_TOP_RIGHT));
		//map.setMapType(G_PHYSICAL_MAP);
		var center;
		if (lat && lng)
			center=new GLatLng(lat, lng);
		else if (default_center)
			center=default_center;
		else
			center=new GLatLng(36.643611, -93.218333);
		if(!zoom)
			zoom=9;
		map.setCenter(center, zoom);

		var icon=generateIcon();
		markers=new Array();
		for (var i=0;i<point_list.length;i++)
		{
			var point=point_list[i];
			map.addOverlay(tm=createMarkerWithData(point, icon));
			markers[i]=tm;
		}
	}
}

function loadEditMapSinglePoint(divname, lat, lng)
{
	if (GBrowserIsCompatible())
	{
		map = new GMap2(document.getElementById(divname));
		map.addControl(new GLargeMapControl());
		//map.addControl(new GMapTypeControl());
		var f=document.getElementById("admin_edit_form");
		if(!lat)
			lat=f.latitude.value;
		if(!lng)
			lng=f.longitude.value;
		var center;
		if (lat && lng)
			center=new GLatLng(lat, lng);
		else if (default_center)
			center=default_center;
		else
			center=new GLatLng(36.643611, -93.218333);
		map.setCenter(center, 13);

		map.addOverlay(createEditMarker(center, new GIcon(G_DEFAULT_ICON)));
		//map.addOverlay(createEditMarker(center, generateIcon()));
	}
}

function loadEditMapBorder(divname, lat, lng)
{
	if (GBrowserIsCompatible())
	{
		map = new GMap2(document.getElementById(divname));
		map.addControl(new GLargeMapControl());
		var f=document.getElementById("admin_edit_form");
		var center;
		if (lat && lng)
			center=new GLatLng(lat, lng);
		else if (default_center)
			center=default_center;
		else
			center=new GLatLng(38.648056, -90.212222);
		map.setCenter(center, 13);

		createEditMarkerBorders();
	}
}

var divStreetView=null;
var exactPoint=null;

function getStreetView(divname, point)
{
	divStreetView=divname;
	var gsv=new GStreetviewClient();
	gsv.getNearestPanoramaLatLng(point, loadStreetView);
	exactPoint=point;
}

function loadStreetView(point)
{
	if(point)
	{
		with(Math)
		{
			lat1=exactPoint.lat();
			lng1=exactPoint.lng();
			lat2=point.lat();
			lng2=point.lng();
			b=lat1-lat2;
			a=lng1=lng2;
			w=atan2(b,a)-PI;
			x=cos(w)/100+parseFloat(lat1);
			y=sin(w)/100+parseFloat(lng1);
			var np=new GLatLng(x, y);
			wang=w/PI*180;
		}
		myPOV = {yaw:wang, pitch:-0};
		panoramaOptions = { latlng: point, pov:myPOV };
		
		//var cd=document.getElementById("complexMapDiv");
		var cd=document.getElementById("streetViewCell");
		var ncd=document.createElement("div");
		ncd.setAttribute("id","streetViewContainerDiv");
		cd.appendChild(ncd);
		var myPano = new GStreetviewPanorama(ncd, panoramaOptions);
	}
}
    
function handleError(errorCode)
{
	alert("Error: "+errorCode);
    return;
}

function drawLandmark()
{
	if(polygon)
	{
		map.removeOverlay(polygon);
		polygon=null;
	}
	var cpoints=new Array();
	if(border_type=="Polygon")
	{
		for(var i=0;i<bpoints.length;i++)
		{
			cpoints[i]=new GLatLng(bpoints[i]['lat'], bpoints[i]['lng']);
		}
		//cpoints[i]=cpoints[0];
		polygon = new GPolygon(cpoints, "#ff0000", 5, 0, "#00cc00", 0.375);
		map.addOverlay(polygon);
	}
	else//Radius
	{
		var lat=center['lat'];
		var lng=center['lng'];
		var d=radius;
		
		with (Math)
		{
			var ctr=0;
			dl=d/69.047;
			for(var w=0;w<2*PI;w+=0.25)
			{
				x=cos(w)*dl+parseFloat(lat);
				y=sin(w)*dl*1.5+parseFloat(lng);
				cpoints[ctr++]=new GLatLng(x,y);
			}
			cpoints[ctr++]=cpoints[0];
		}
		polygon = new GPolygon(cpoints, "#ff0000", 5, 0, "#00cc00", 0.375);
		map.addOverlay(polygon);
	}
	//return marker;
	return;
}

function changeArea(sel)
{
	var selLandmark=document.getElementById("search_landmarks");
	var selCities=document.getElementById("search_city");
	
	selLandmark.value=0;
	selCities.value=0;
	showLandmark(0);
	showRealtimeResults();
}

function changeCity(sel)
{
	var selLandmark=document.getElementById("search_landmarks");
	var selAreas=document.getElementById("search_area");
	
	if(selAreas)
		selAreas.value=0;
	if(selLandmark)
	{
		selLandmark.value=0;
		showLandmark(0);
	}
	
	showRealtimeResults();
}

function changeLandmark(sel)
{
	var selAreas=document.getElementById("search_area");
	var selCities=document.getElementById("search_city");
	
	if(selAreas)
		selAreas.value=0;
	selCities.value=0;
	
	showLandmark(sel.value);
	showRealtimeResults();
}

function changeCritera(sel)
{
	showRealtimeResults();
}

var sb=null;

function showRealtimeResults()
{
	if(!sb)
	{
		sb=new LoadingGeneric('homeMapDiv');
	}
	sb.start('bar');
	var http_request=makeHttpRequestObject();
	if (!http_request)
	{
		return false;
	}
	var f=document.getElementById("homeSearchForm");

	var query_string ="";
	if(f.search_landmarks)
		query_string+="search_landmarks="+f.search_landmarks.value;
	if(f.search_area)
		query_string+="&search_area="+f.search_area.value;
	if(f.search_beds)
		query_string+="&search_beds="+f.search_beds.value;
	if(f.search_baths)
		query_string+="&search_baths="+f.search_baths.value;
	if(f.search_sqft)
		query_string+="&search_sqft="+f.search_sqft.value;
	if(f.search_sqft_min)
		query_string+="&search_sqft_min="+f.search_sqft_min.value;
	if(f.search_sqft_max)
		query_string+="&search_sqft_max="+f.search_sqft_max.value;
	if(f.search_maponly)
		query_string+="&search_maponly="+f.search_maponly.value;
	if(f.search_price)
		query_string+="&search_price="+f.search_price.value;
	if(f.search_price_min)
		query_string+="&search_price_min="+f.search_price_min.value;
	if(f.search_price_max)
		query_string+="&search_price_max="+f.search_price_max.value;
	query_string+="&search_city="+f.search_city.value;
	
	/*if(
		f.search_city.selectedIndex > 0 ||
		(f.search_landmarks && f.search_landmarks.value > 0) ||
		(f.search_area && f.search_area.value > 0)
	)
	{
		if($('searchParamsLocation'))
			$('searchParamsLocation').hide();
	}*/
		
	if(f.search_city.selectedIndex > 0)
	{
		if($('searchParamsLocation'))
		{
			new Effect.BlindUp('searchParamsLocation');
			new Effect.BlindDown('searchParamsLocationSelected');
			$("searchingIn").update(f.search_city.value);
		}
	}
	if(f.search_landmarks && f.search_landmarks.selectedIndex > 0)
	{
		new Effect.BlindUp('searchParamsLocation');
		new Effect.BlindDown('searchParamsLocationSelected');
		$("searchingIn").update(f.search_landmarks.options[f.search_landmarks.selectedIndex].text);
	}
	if(f.search_area && f.search_area.selectedIndex > 0)
	{
		new Effect.BlindUp('searchParamsLocation');
		new Effect.BlindDown('searchParamsLocationSelected');
		$("searchingIn").update(f.search_area.options[f.search_area.selectedIndex].text);
	}
		
	http_request.onreadystatechange = function() { processShowRealtimeResults(http_request); };
	try {
		AJAXSend(http_request,QBS_site_url+"/user_ajax/get_realtime",query_string);
	}
	catch (e)
	{
		alert("Error requesting data from server.  Contact Technical Support.\n\r"+e);
	}
}

var registerLB=null;
var gBounds=null;

function processShowRealtimeResults(http_request)
{
	if (http_request.readyState == 4)
	{
		if (http_request.status == 200)
		{
			if(markers)
			{
				for(var i=0;i<markers.length;i++)
				{
					if(markers[i])
						map.removeOverlay(markers[i]);
				}
			}
			var ld=document.getElementById("searchResultList");
			if(ld)
			{
				while(ld.childNodes.length > 0)
				{
					ld.removeChild(ld.firstChild);
				}
			}
			var xmldoc=http_request.responseXML;
			if(!xmldoc)
			{
				sb.end();
				alert("Sorry, I had trouble getting results for that search.  Please try again.");
				return;
			}
			var isregistered=qXML.getInt(xmldoc,"registered");
			var show=qXML.getInt(xmldoc,"showresults");
			//if(show != 0)
			{
				var complexes=xmldoc.getElementsByTagName("complex");
				var condo_count=qXML.getInt(xmldoc,"condo_count");
				var listing_count=qXML.getInt(xmldoc,"listing_count");
				var sc=$("searchResultCount");
				if(sc)
				{
					if(condo_count > complexes.length)
					{
						sc.innerHTML="("+listing_count+" units for sale in "+complexes.length+" of "+condo_count+" matching complexes)";
					}
					else
					{
						if(complexes.length > 1 && listing_count > 1)
							sc.innerHTML="("+listing_count+" units for sale in "+complexes.length+" complexes)";
						else if(listing_count > 1)
							sc.innerHTML="("+listing_count+" units for sale in "+complexes.length+" complex)";
						else
							sc.innerHTML="("+listing_count+" unit for sale in "+complexes.length+" complex)";
					}
				}
				if(complexes.length < 1)
				{
					alert("No condos matched your search criteria.");
					sb.end();
					return;
				}
				var icon=generateIcon();
				markers=new Array();
				if(ld)
				{
					var srlw=new Element("table", {
						id: 'searchResultsListWrapper'
					});
					var srltb;
					var srltr;
					srlw.appendChild(srltb=new Element("tbody"));
					ld.appendChild(srlw);
				}
				for(i=0;i<complexes.length;i++)
				{
					var point=new Array();
					var complex=complexes.item(i);
					var plat=getNamedNodeValue(complex,"latitude");
					var plong=getNamedNodeValue(complex,"longitude");
					var name=getNamedNodeValue(complex,"name");
					var cid=getNamedNodeValue(complex,"cid");
					var active_count=getNamedNodeValue(complex,"active_count");
					var image_id=getNamedNodeValue(complex,"image_id");
					var description=getNamedNodeValue(complex,"description");
					var show_img=getNamedNodeValue(complex,"show_img");
					if(!description)
						description="";
					point[0]=getNamedNodeValue(complex,"latitude");
					point[1]=getNamedNodeValue(complex,"longitude");
					if(show_img==1)
					{
						img_str="<a href='"+QBS_site_url+"/condo/detail/"+cid+"'><img class='mapThumb' src='"+QBS_base_url+"cimages/"+image_id+".jpg' alt='"+name+"' /></a>";
					}
					else
					{
						img_str="";
					}
					var cellText=img_str+"<strong><a href='"+QBS_site_url+"/condo/detail/"+cid+"'>"+name+"</a></strong> - "+
						active_count+" unit(s) for sale<hr/>"+
						description+"&nbsp;<a href='"+QBS_site_url+"/condo/detail/"+cid+"'>[More Details]</a>";
					point[2]="<div class='mapInfoDiv'>"+cellText+"</div>";
					if((plat != 0) && (plong!=0))
					{
						map.addOverlay(tm=createMarkerWithData(point, icon));
						markers[i]=tm;
					}
					if(ld)
					{
						if((i%3)==0)
							srltb.appendChild(srltr=new Element("tr"));
						srltr.appendChild(srltd=new Element("td"));
						srltd.appendChild(srl=new Element("div", { 'class': 'searchResultListItem'}));
						srl.addClassName();
						srl.onclick=listClickFunction(cid);
						srl.update(cellText);
					}
				}
				map.enableContinuousZoom();
				var bounds=xmldoc.getElementsByTagName("bounds");
				if(bounds.length)
				{
					var dbounds=bounds.item(0);
					var u=dbounds.getElementsByTagName("upper").item(0);
					var l=dbounds.getElementsByTagName("lower").item(0);
					ub=new Array();
					ub['lat']=parseFloat(getNamedNodeValue(u,"lat"));
					ub['lng']=parseFloat(getNamedNodeValue(u,"lng"));
					lb=new Array();
					lb['lat']=parseFloat(getNamedNodeValue(l,"lat"));
					lb['lng']=parseFloat(getNamedNodeValue(l,"lng"));
					gBounds=new GLatLngBounds(
						new GLatLng(lb['lat'],lb['lng']),
						new GLatLng(ub['lat'],ub['lng'])
					);
					if(
						lb['lat'] &&
						lb['lng'] &&
						ub['lat'] &&
						ub['lng']
					)
					{
						map.setCenter(gBounds.getCenter());
						map.setZoom(map.getBoundsZoomLevel(gBounds));
					}
					else
					{
						center=new GLatLng(36.643611, -93.218333);
						map.setCenter(center, 16);
					}
					map.savePosition();
				}
				sb.end();
				if(isregistered > 0)
				{
					loadSearches();
				}
			}
			//else //don't show results, force registration
			if(show == 0)
			{
				registerLB=new LightboxGeneric('#666',0.8);
				registerLB.start(300,300,'ajaxMessageDiv');
				var table=new Element("table", {
					className: 'searchTable'
				});
				var tb=new Element("tbody");
				var tr;
				var td;
				table.appendChild(tb);
				tb.appendChild(tr=new Element("tr"));
				
				tr.appendChild(td=new Element("td",{
					className: 'searchTableHeadLeft'
				}));
				td.appendChild(new Element("img",{
					src: QBS_base_url+'graphics/searchHeaderBarLeftEnd.png'
				}));
				
				tr.appendChild(td=new Element("td",{className: 'searchTableHeadMid'}).update("Please Login"));
				
				tr.appendChild(td=new Element("td",{className: 'searchTableHeadRight'}));
				td.setStyle({
					background: 'transparent'
				});
				td.appendChild(new Element("img",{ src: QBS_base_url+'graphics/searchHeaderBarRightEnd.png'}));
				
				tb.appendChild(tr=new Element("tr"));
				tr.appendChild(td=new Element("td",{className: 'searchTableBodyLeftMid'}));
				tr.appendChild(td=new Element("td",{className: 'searchTableBodyCenter'}));
				td.appendChild(cd=new Element("div",{id: 'ajaxRegisterDiv'}));
				cd.hide();
				tr.appendChild(td=new Element("td",{className: 'searchTableBodyRightMid'}));
				
				tb.appendChild(tr=new Element("tr"));
				
				tr.appendChild(td=new Element("td",{className: 'searchTableFooterLeft'}));
				td.appendChild(new Element("img",{ src: QBS_base_url+'graphics/searchFooterBarLeft.png'}));
				
				tr.appendChild(td=new Element("td",{className: 'searchTableFooterMid'}));
				
				tr.appendChild(td=new Element("td",{className: 'searchTableFooterRight'}));
				td.setStyle({
					background: 'transparent'
				});
				td.appendChild(new Element("img",{ src: QBS_base_url+'graphics/searchFooterBarRight.png'}));
				
				registerLB.objLightbox.appendChild(table);
				new Effect.BlindDown(cd,{
					delay: 1.0
				});
				
				cd.update("We're glad you like our website!<br/>\
				To continue using the search tool, we simply ask that you register with your name and email address.<br/>\
				If you've already registered, you just need to provide your email address to log in.<br/>\
				By registering, you will get:<ul>\
				<li>unlimited access to our unique search tool</li>\
				<li>access to 'Sold' condo information</li>\
				<li>the ability to save your favorite searches</li>\
				</ul>Thank You!<br/>");
				loginStart(cd);
			}
		}
		else
		{
			alert('Server Error, contact Techincal Support.');
			sb.end();
		}
	}
}

function userLogin()
{
	registerLB=new LightboxGeneric('#666',0.8);
	registerLB.start(300,300,'ajaxMessageDiv');
	var table=new Element("table", {
		className: 'searchTable'
	});
	var tb=new Element("tbody");
	var tr;
	var td;
	table.appendChild(tb);
	tb.appendChild(tr=new Element("tr"));
	
	tr.appendChild(td=new Element("td",{
		className: 'searchTableHeadLeft'
	}));
	td.appendChild(new Element("img",{
		src: QBS_base_url+'graphics/searchHeaderBarLeftEnd.png'
	}));
	
	tr.appendChild(td=new Element("td",{className: 'searchTableHeadMid'}).update("Please Login"));
	
	tr.appendChild(td=new Element("td",{className: 'searchTableHeadRight'}));
	td.setStyle({
		background: 'transparent'
	});
	td.appendChild(new Element("img",{ src: QBS_base_url+'graphics/searchHeaderBarRightEnd.png'}));
	
	tb.appendChild(tr=new Element("tr"));
	tr.appendChild(td=new Element("td",{className: 'searchTableBodyLeftMid'}));
	tr.appendChild(td=new Element("td",{className: 'searchTableBodyCenter'}));
	td.appendChild(cd=new Element("div",{id: 'ajaxRegisterDiv'}));
	cd.hide();
	tr.appendChild(td=new Element("td",{className: 'searchTableBodyRightMid'}));
	
	tb.appendChild(tr=new Element("tr"));
	
	tr.appendChild(td=new Element("td",{className: 'searchTableFooterLeft'}));
	td.appendChild(new Element("img",{ src: QBS_base_url+'graphics/searchFooterBarLeft.png'}));
	
	tr.appendChild(td=new Element("td",{className: 'searchTableFooterMid'}));
	
	tr.appendChild(td=new Element("td",{className: 'searchTableFooterRight'}));
	td.setStyle({
		background: 'transparent'
	});
	td.appendChild(new Element("img",{ src: QBS_base_url+'graphics/searchFooterBarRight.png'}));
	
	registerLB.objLightbox.appendChild(table);
	new Effect.BlindDown(cd,{
		delay: 1.0
	});
	
	cd.update("If you've already registered, you just need to provide your email address to log in.<br/>\
	If you haven't signed up yet, we'll just ask for a little bit of information.<br/>\
	</ul>Thank You!<br/>");
	loginStart(cd);
}

function listClickFunction(cid)
{
	return function () { window.location=QBS_site_url+"/condo/detail/"+cid; }; 
}

function showLandmark(lid)
{
	if(lid==0)
	{
		if(polygon)
		{
			map.removeOverlay(polygon);
			polygon=null;
		}
		return;
	}
	
	var http_request=makeHttpRequestObject();
	if (!http_request)
	{
		return false;
	}
	var query_string="landmark_id="+lid;
	http_request.onreadystatechange = function() { processShowLandmark(http_request); };
	try {
		AJAXSend(http_request,QBS_site_url+"/user_ajax/get_landmark",query_string);
	}
	catch (e)
	{
		alert("Error requesting data from server.  Contact Technical Support.\n\r"+e);
	}
}

function processShowLandmark(http_request)
{
	if (http_request.readyState == 4)
	{
		if (http_request.status == 200)
		{
			var xmldoc=http_request.responseXML;
			border_type=getNamedNodeValue(xmldoc,"border_type");
			var centers=xmldoc.getElementsByTagName("center");
			if(centers.length)
			{
				var dcenter=centers.item(0);
				center=new Array();
				center['lat']=parseFloat(getNamedNodeValue(dcenter,"lat"));
				center['lng']=parseFloat(getNamedNodeValue(dcenter,"lng"));
			}
			var radii=xmldoc.getElementsByTagName("radius");
			if(radii.length)
				radius=parseFloat(radii.item(0).childNodes.item(0).nodeValue);
			var zooms=xmldoc.getElementsByTagName("zoom");
			if(zooms.length)
				zoom=parseFloat(zooms.item(0).childNodes.item(0).nodeValue);
			var points=xmldoc.getElementsByTagName("point");
			bpoints=new Array();
			for(var i=0;i<points.length;i++)
			{
				var dpoint=points.item(i);
				bpoints[i]=new Array();
				bpoints[i]['lat']=getNamedNodeValue(dpoint,"lat");
				bpoints[i]['lng']=getNamedNodeValue(dpoint,"lng");
			}
			drawLandmark();
		}
		else
		{
			alert('Server Error, contact Techincal Support.');
		}
	}
}

var paramState=1;

function showParameters()
{
	var td=$("searchParametersBody");
	var ssw=$("savedSearchesWrapper");
	
	var img1=$("paramShowHide");
	var img2=$("searchesShowHide");
	if(paramState==0)
	{
		img1.src=QBS_base_url+"graphics/hide_button.jpg";
		img2.src=QBS_base_url+"graphics/show_button.jpg";
		new Effect.Parallel([
			new Effect.BlindDown(td, {
				sync: true
			}),
			new Effect.BlindUp(ssw, {
				sync: true
			})
		]);
		paramState=1;
	}
	else
	{
		img1.src=QBS_base_url+"graphics/show_button.jpg";
		img2.src=QBS_base_url+"graphics/hide_button.jpg";
		new Effect.Parallel([
			new Effect.BlindUp(td, {
				sync: true
			}),
			new Effect.BlindDown(ssw, {
				sync: true
			})
		]);
		paramState=0;
	}
}

var lastToggle=1;

function toggleSearches(searchState)
{
	var rs=$("recentSearches");
	var ss=$("savedSearches");
	
	if(searchState==lastToggle)
		return;
	
	lastToggle=searchState;
	if(searchState==0)
	{
		new Effect.Parallel([
			new Effect.BlindUp(rs, {
				sync: true
			}),
			new Effect.BlindDown(ss, {
				sync: true
			})
		]);
		searchState=1;
	}
	else
	{
		new Effect.Parallel([
			new Effect.BlindDown(rs, {
				sync: true
			}),
			new Effect.BlindUp(ss, {
				sync: true
			})
		]);
		searchState=0;
	}
}

function loginStart(ld)
{
	//ld.update("");
	var f=new Element("form", { id: 'ajaxLoginform'});
	f.appendChild(new Element("textnode").update("<strong>Email:</srtong><br/>"));
	f.appendChild(new Element("input", { type: 'text', name: 'email', size: 30}));
	f.appendChild(new Element("textnode").update("<br/><br/>"));
	var img;
	f.appendChild(img=new Element("img",{
		src: QBS_base_url+'graphics/cancel_button.png',
		className: 'clickable'
	}));
	img.observe('click', function() {
		cancelLogin();
	});
	f.appendChild(new Element("textnode").update("&nbsp;"));
	f.appendChild(img=new Element("img",{
		src: QBS_base_url+'graphics/next_button.png',
		className: 'clickable'
	}));
	img.observe('click', function() { loginEmail(f); });
	ld.appendChild(f);
}

function loginName(ld)
{
	var f=$('ajaxLoginform');
	
	var email=$F(f.email);
	
	ld.update("");
	f=new Element("form", { id: 'ajaxLoginform'});
	f.appendChild(new Element("input", { type: 'hidden', name: 'email', value: email}));
	f.appendChild(new Element("div").update("Step 2 of 3").setStyle({
		fontWeight: 'bold',
		textAlign: 'center'
	}));
	f.appendChild(new Element("textnode").update("<strong>First Name:</strong><br/>"));
	f.appendChild(new Element("input", { type: 'text', name: 'first_name', size: 30}));
	f.appendChild(new Element("textnode").update("<br/>"));
	f.appendChild(new Element("textnode").update("<strong>Last Name:</strong><br/>"));
	f.appendChild(new Element("input", { type: 'text', name: 'last_name', size: 30}));
	f.appendChild(new Element("textnode").update("<br/><br/>"));
	var img;
	f.appendChild(img=new Element("img",{
		src: QBS_base_url+'graphics/cancel_button.png',
		className: 'clickable'
	}));
	img.observe('click', function() {
		cancelLogin();
	});
	f.appendChild(new Element("textnode").update("&nbsp;"));
	f.appendChild(img=new Element("img",{
		src: QBS_base_url+'graphics/next_button.png',
		className: 'clickable'
	}));
	img.observe('click', function() { loginSaveName(f); });
	ld.appendChild(f);
}

function loginEmail(f)
{
	if(f.email.present())
	{
		new Ajax.Request(QBS_site_url+"/user_ajax/login_email", {
			parameters: f.serialize(true),
			onSuccess: function (transport) { processLoginEmail(transport.responseXML); }
		});
	}
	else
	{
		alert("Please enter your email address.");
		f.email.focus();
	}
}

function processLoginEmail(xmldoc)
{
	var uid=qXML.getInt(xmldoc,"user_id");
	var f=$('ajaxLoginform');
	var rd=$('ajaxRegisterDiv');
	
	if(uid < 0)
	{
		alert("Please use a valid email address, thank you.");
		f.email.focus();
		f.email.select();
	}
	else if(uid > 0)
 	{
 		var name=qXML.getString(xmldoc,"fullname");
 		rd.update("Welcome back, "+name+"!<br/>You now have access to your saved searches and all information on our website.<br/>");
		var img;
		rd.appendChild(img=new Element("img",{
			src: QBS_base_url+'graphics/close_button.png',
			className: 'clickable'
		}));
		img.observe('click', function() {
			new Effect.BlindUp(rd,{
				afterFinish: function () {registerLB.end(rd);}
			});
		});
		showUserData();
	}
	else
	{
		loginName(rd);
	}
}

function loginSaveName(f)
{
	if(f.first_name.present() && f.last_name.present())
	{
		new Ajax.Request(QBS_site_url+"/user_ajax/login_save_name", {
			parameters: f.serialize(true),
			onSuccess: function (transport) { processLoginSaveName(transport.responseXML); }
		});
	}
	else
	{
		alert("Please enter your first and last name.");
		if(f.first_name.present())
			f.last_name.focus();
		else
			f.first_name.focus();
	}
}

function processLoginSaveName(xmldoc)
{
	var uid=qXML.getInt(xmldoc,"user_id");
	var f=$('ajaxLoginform');
	var rd=$('ajaxRegisterDiv');
	
	if(uid < 1)
	{
		alert("Sorry, I seem to be having problems registering you.  Please try again.");
		loginStart(rd);
	}
	else
 	{
 		var name=qXML.getString(xmldoc,"fullname");
 		rd.update("Welcome, "+name+
 		"! The next time you visit our website, you'll only need to provide your email address and we'll remember who you are!<br/>");
		loginOptional(rd);
	}
}

function loginOptional(ld)
{
	//ld.update("");
	f=new Element("form", { id: 'ajaxLoginform'});
	f.appendChild(new Element("div").update("Last Step (All fields optional)").setStyle({
		fontWeight: 'bold',
		textAlign: 'center'
	}));
	f.appendChild(new Element("textnode").update("<strong>Address</strong> (optional):<br/>"));
	f.appendChild(new Element("textarea", { name: 'address', cols: 30, rows: 3 }));
	f.appendChild(new Element("textnode").update("<strong>Phone</strong> (optional):<br/>"));
	f.appendChild(new Element("input", { type: 'text', name: 'phone', size: 30}));
	f.appendChild(new Element("textnode").update("<br/>"));
	f.appendChild(new Element("textnode").update("<strong>Moving Soon?</strong> (optional)<br/>"));
	var s;
	f.appendChild(s=new Element("select", { name: 'moving'}));
	s.appendChild(new Element("option", { value: 0}).update("Choose Your Time Frame"));
	s.appendChild(new Element("option", {}).update("Immediately"));
	s.appendChild(new Element("option", {}).update("in 1-3 months"));
	s.appendChild(new Element("option", {}).update("in 3-6 months"));
	s.appendChild(new Element("option", {}).update("in the next year"));
	f.appendChild(new Element("textnode").update("<br/><br/>"));
	var img;
	f.appendChild(img=new Element("img",{
		src: QBS_base_url+'graphics/close_button.png',
		className: 'clickable'
	}));
	img.observe('click', function() { loginSaveOptional(f); });
	f.appendChild(new Element("textnode").update("&nbsp;"));
	f.appendChild(img=new Element("img",{
		src: QBS_base_url+'graphics/next_button.jpg',
		className: 'clickable'
	}));
	img.observe('click', function() { loginSaveOptional(f); });
	ld.appendChild(f);
}

function loginSaveOptional(f)
{
	new Ajax.Request(QBS_site_url+"/user_ajax/login_save_optional", {
		parameters: f.serialize(true)
	});
	finishLogin();
}

function finishLogin()
{
	var rd=$('ajaxRegisterDiv');
	
	rd.update("Thank you, please enjoy the wesite!<br/>");
	var img;
	rd.appendChild(img=new Element("img",{
		src: QBS_base_url+'graphics/close_button.png',
		className: 'clickable'
	}));
	img.observe('click', function() {
		new Effect.BlindUp(rd,{
			afterFinish: function () {registerLB.end(rd);}
		});
	});
	showUserData();
}

function cancelLogin()
{
	new Effect.BlindUp($('ajaxRegisterDiv'),{
		//afterFinish: function () { window.location=QBS_site_url; }
		afterFinish: function () { registerLB.end(); }
	});
}

function mapGrow(b)
{
	//map.savePosition();
	var mcs=$('mapTableContainerSearch').absolutize();
	if(mcs.getWidth() < 800)
	{
		var mcs=$('mapTableContainerSearch').absolutize();
		$('searchTableContainerDiv').setStyle({
			height: '465px'
		});
		new Effect.Scale(mcs, (880/550)*100, {
			scaleY: false,
			scaleContent: false,
			scaleMode: {originalWidth: 550},
			scaleFrom: 100,
			duration: 0.75,
			//transition: Effect.Transitions.spring,
			afterFinish: function () {
				map.checkResize();
				//map.returnToSavedPosition();
				map.setCenter(gBounds.getCenter());
				map.setZoom(map.getBoundsZoomLevel(gBounds));
			}
		});
		//b.value='shrink';
		b.innerHTML='&lt;';
	}
	else// if(b.value=='shrink')
	{
		new Effect.Scale($('mapTableContainerSearch'), 100, {
			scaleY: false,
			scaleContent: false,
			scaleMode: {originalWidth: 550},
			scaleFrom: (880/550)*100,
			duration: 1.5,
			transition: Effect.Transitions.spring,
			afterFinish: function () {
				$('mapTableContainerSearch').relativize();
				//b.value='grow';
				b.innerHTML='&gt;';
				map.checkResize();
				//map.returnToSavedPosition();
				map.setCenter(gBounds.getCenter());
				map.setZoom(map.getBoundsZoomLevel(gBounds));
			}
		});
	}
}

function loadSearches()
{
	new Ajax.Request(QBS_site_url+"/user_ajax/load_saved", {
		onSuccess: function (transport) { processLoadSearches(transport.responseXML,'savedSearches'); }
	});
	new Ajax.Request(QBS_site_url+"/user_ajax/load_recent", {
		onSuccess: function (transport) { processLoadSearches(transport.responseXML,'recentSearches'); }
	});
}

function processLoadSearches(xmldoc,divName)
{
	var ssd=$(divName);
	var sd;
	
	if(!ssd)
		return;
	ssd.update("");
	var searches=qXML.getItems(xmldoc,"search");
	for(var i=0;i<searches.length;i++)
 	{
 		var stitle="";
 		var search=searches.item(i);
 		var city=qXML.getString(search,"city");
 		var area=qXML.getString(search,"area");
 		var landmark=qXML.getString(search,"landmark");
 		var bedrooms=qXML.getString(search,"bedrooms");
 		var bathrooms=qXML.getString(search,"bathrooms");
 		var price_max=qXML.getString(search,"price_max");
 		var price_min=qXML.getString(search,"price_min");
 		var sqft_max=qXML.getString(search,"sqft_max");
 		var sqft_min=qXML.getString(search,"sqft_min");
 		var sid=qXML.getInt(search,"id");
 		if(city)
 		{
 			stitle=appendTitle(stitle,city);
 		}
 		else if(area)
 		{
 			stitle=appendTitle(stitle,area);
 		}
 		else if(landmark)
 		{
 			stitle=appendTitle(stitle,landmark);
 		}
 		else
 		{
 			stitle=appendTitle(stitle,"Anywhere");
 		}
 		if(bedrooms)
 		{
 			stitle=appendTitle(stitle,bedrooms+" beds");
 		}
 		if(bathrooms)
 		{
 			stitle=appendTitle(stitle,bathrooms+" baths");
 		}
 		if(price_min)
 		{
	 		if(price_max)
	 		{
	 			stitle=appendTitle(stitle,"Price $"+price_min+" to $"+price_max);
	 		}
	 		else
	 		{
	 			stitle=appendTitle(stitle,"Price from $"+price_min);
	 		}
 		}
 		else if(price_max)
 		{
 			stitle=appendTitle(stitle,"Price up to $"+price_max);
 		}
 		if(sqft_min)
 		{
	 		if(sqft_max)
	 		{
	 			stitle=appendTitle(stitle,"Sqft "+sqft_min+" to "+sqft_max);
	 		}
	 		else
	 		{
	 			stitle=appendTitle(stitle,"Sqft from $"+sqft_min);
	 		}
 		}
 		else if(sqft_max)
 		{
 			stitle=appendTitle(stitle,"Sqft up to "+sqft_max);
 		}
 		
 		ssd.appendChild(sd=new Element("div",{
 			className: 'searchReload'
 		}).update(stitle));
		sd.observe('click', reloadFunction(sid));
	}
}

function reloadFunction(sid)
{
	return function() { reloadSavedSearch(sid); };
}

function appendTitle(title,add)
{
	if(title.length)
		title+="/"+add;
	else
		title=add;
	
	return title;
}

function reloadSavedSearch(sid)
{
	new Ajax.Request(QBS_site_url+"/user_ajax/reload_search", {
		parameters: {
			'sid': sid
		},
		onSuccess: function (transport) { processReloadSearch(transport.responseXML); }
	});
}

function processReloadSearch(xmldoc)
{
	var f=$("homeSearchForm");
	
	f.search_landmarks.value=qXML.getInt(xmldoc,"landmark_id");
	showLandmark(f.search_landmarks.value);
	var city=qXML.getString(xmldoc,"city");
	if(city.length > 0)
		f.search_city.value=city;
	else
		f.search_city.value=0;
	f.search_area.value=qXML.getInt(xmldoc,"area");
	f.search_beds.value=qXML.getInt(xmldoc,"bedrooms");
	f.search_baths.value=qXML.getInt(xmldoc,"bathrooms");
	f.search_sqft_min.value=qXML.getInt(xmldoc,"sqft_min");
	f.search_sqft_max.value=qXML.getInt(xmldoc,"sqft_max");
	f.search_price_min.value=qXML.getInt(xmldoc,"price_min");
	f.search_price_max.value=qXML.getInt(xmldoc,"price_max");
	
	showRealtimeResults();
}

function saveSearch(img)
{
	var e=$(img);
	var spb=$('searchParametersBody');
	var ssw=$('mySearchesHeader');
	var arrayObjPosition = Element.cumulativeOffset(ssw);
	var arrayObjSize = Element.getDimensions(ssw);
	
	var d=new Element("div");
	d.setStyle({
		position: 'absolute',
		border: 'solid 2px #192088',
		display: 'none',
		backgroundColor: '#666',
		opacity: 0.6
	});
	$$('body')[0].appendChild(d);
	Element.clonePosition(d,spb);
	d.show();
	new Effect.Parallel([
		new Effect.Move(d, {
			mode: 'absolute',
			x: arrayObjPosition['left']+arrayObjSize['width']/2,
			y: arrayObjPosition['top']+arrayObjSize['height']/2,
			sync: true
		}),
		new Effect.Scale(d, 0, {
			scaleFrom: 100,
			sync: true,
			afterFinish: function () { d.remove(); }
		})
	]);
	
	new Ajax.Request(QBS_site_url+"/user_ajax/save_search", {
		parameters: {
		},
		//onSuccess: function (transport) { processSaveSearch(transport.responseXML); },
		onSuccess: function (transport) { loadSearches(); }
	});
	
}

function showUserData()
{
	if($('searchTableHistory'))
	{
		$('searchTableHistory').show();
		$('searchSaveButton').show();
		loadSearches();
	}
	if($('signInSearch'))
	{
		$('signInSearch').hide();
	}
}
