
var map;var CRITICAL_ZOOM=12;var CURRENT_CENTERPOINT;var LISTINGS_PER_PAGE=10;var IMG_BASE_URL="/images/gmap/";var BOUNDS_LOCKED=false;var MAP_RESET=false;var MAP_RESET_QUICK=false;var VIEWING_RESULTS_SET=false;var FORCE_REFRESH_MARKERS=false;var SAVED_SEARCH=false;var FILTER_MENU_TIMER;var CITY_MARKERS=new Object();var LISTING_MARKERS=new Object();var MARKERS=new Object();var CITY_MARKERS_VISIBLE=false;var ZOOM_NOTICE_DIRECTION="in";var CURRENT_LISTING_ID="";var CURRENT_PAGE;var FILTERS=new Object();function distanceBetween(lat1,lng1,lat2,lng2)
{var lat=[lat1,lat2];var lng=[lng1,lng2];var R=6378137;var dLat=(lat[1]-lat[0])*Math.PI/180;var dLng=(lng[1]-lng[0])*Math.PI/180;var a=Math.sin(dLat/2)*Math.sin(dLat/2)+
Math.cos(lat[0]*Math.PI/180)*Math.cos(lat[1]*Math.PI/180)*Math.sin(dLng/2)*Math.sin(dLng/2);var c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));var d=R*c;return Math.round(d);}
function addCommasToNumber(nStr)
{nStr+='';x=nStr.split('.');x1=x[0];x2=x.length>1?'.'+x[1]:'';var rgx=/(\d+)(\d{3})/;while(rgx.test(x1)){x1=x1.replace(rgx,'$1'+','+'$2');}
return x1+x2;}
function toggleFrame(frameid){var tabObj=$("MapTab"+frameid);if(!tabObj.hasClassName('selected')){$$('#MapSearchTabs a.map_tab').each(function(a){if($(a).hasClassName('map_tab_selected')){$(a).removeClassName('map_tab_selected');}});tabObj.addClassName('map_tab_selected');if(frameid=="Results"){BOUNDS_LOCKED=true;showMapAndResults();$("FilterBar").show();$("MapResultsBar").show();$("MS_ResultsNotice").show();$("Map").show();if($("MapSearchDetails").visible()&&VIEWING_RESULTS_SET){}else{refreshListingResults();}
$("MapSearchDetails").hide();expandResults();}
if(frameid=="Map"){if(BOUNDS_LOCKED)
{BOUNDS_LOCKED=false
FORCE_REFRESH_MARKERS=true;processMapChange();};VIEWING_RESULTS_SET=false;showMapAndResults();$("Map").show();$("FilterBar").show();$("MapResultsBar").show();$("MS_ResultsNotice").hide();$("MapSearchDetails").hide();collapseResults();}
if(frameid=="Details"){$("MapTabDetails").show();$("MapSearchDetails").show();hideMapAndResults();$("FilterBar").hide();$("MapResultsBar").hide();$("MS_ResultsNotice").hide();collapseResults();$("Map").hide();}}}
function hideMapAndResults(){$("MapAndResults").setStyle({height:'1px',visibility:'hidden'});}
function showMapAndResults(){$("MapAndResults").setStyle({height:'472px',visibility:'visible'});}
function findMarker(mls_id,mls_no,lat,lng,showdetails){var listing_id=mls_id+"_"+mls_no;if(!LISTING_MARKERS[listing_id]){addListingMarker(mls_id,mls_no,lat,lng);}
if(showdetails==true){showMoreInfo(listing_id);toggleFrame("Details");}
else
{var panorama=map.getStreetView();if(panorama.getVisible())
{panorama.setVisible(false);}
map.panTo(MARKERS[LISTING_MARKERS[listing_id].marker_id].getPosition());if(MARKERS[LISTING_MARKERS[listing_id].marker_id].active!=true){google.maps.event.trigger(MARKERS[LISTING_MARKERS[listing_id].marker_id],"click");}
else
{MARKERS[LISTING_MARKERS[listing_id].marker_id].infoWindow.open(map,MARKERS[LISTING_MARKERS[listing_id].marker_id]);}}
if(map.getZoom()<CRITICAL_ZOOM){map.setZoom(CRITICAL_ZOOM);}}
function mouseoverMarker(listing_id,lat,lng){if(LISTING_MARKERS[listing_id]&&MARKERS[LISTING_MARKERS[listing_id].marker_id]){google.maps.event.trigger(MARKERS[LISTING_MARKERS[listing_id].marker_id],"mouseover",listing_id);}else{highlightListing(listing_id);}}
function mouseoutMarker(listing_id,lat,lng){if(LISTING_MARKERS[listing_id]&&MARKERS[LISTING_MARKERS[listing_id].marker_id]){google.maps.event.trigger(MARKERS[LISTING_MARKERS[listing_id].marker_id],"mouseout");}else{deselectListing(listing_id);}}
function highlightListing(id){var mylisting=$(id);if(mylisting){mylisting.setAttribute('class','listing_tile_highlighted');mylisting.className="listing_tile_highlighted";}}
function selectListing(id){var mylisting=$(id);if(mylisting){mylisting.setAttribute('class','listing_tile_selected');mylisting.className="listing_tile_selected";}}
function deselectListing(id){var mylisting=$(id);if(mylisting){mylisting.setAttribute('class','listing_tile');mylisting.className="listing_tile";}}
function collapseResults(){$("MapSearchResults").hide();$("MapAndResults").setStyle({paddingLeft:'0px'});if(Prototype.Browser.WebKit){var mapwidth=$("MapAndResults").getWidth()+'px';$("Map").setStyle({width:mapwidth});}
google.maps.event.trigger(map,'resize');map.setCenter(CURRENT_CENTERPOINT);}
function expandResults(){$("MapSearchResults").show();$("MapAndResults").setStyle({paddingLeft:'300px'});if(Prototype.Browser.WebKit){var mapwidth=($("MapAndResults").getWidth()-600)+'px';$("Map").setStyle({width:'100%'});}
google.maps.event.trigger(map,'resize');map.setCenter(CURRENT_CENTERPOINT);}
function toggleFilterMenu(){if(!$("FilterMenu").visible()){$("FilterMenu").show();$("SEARCH_city").focus();}else{$("FilterMenu").hide();}}
Effect.BlindRight=function(element){element=$(element);var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleY:false,scaleFrom:0,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makeClipping().setStyle({width:'0px'}).show();},afterFinishInternal:function(effect){effect.element.undoClipping();}},arguments[1]||{}));};Effect.BlindLeft=function(element){element=$(element);element.makeClipping();return new Effect.Scale(element,0,Object.extend({scaleContent:false,scaleY:false,restoreAfterFinish:true,afterFinishInternal:function(effect){effect.element.undoClipping().hide();}},arguments[1]||{}));};function isInBounds(lat,lng){var thispoint=new google.maps.LatLng(lat,lng);var themap=map.getBounds();if(themap.contains(thispoint))return true;}
function resetMap(){MAP_RESET=true;toggleFrame("Map");$("MapTabDetails").hide();var default_centerpoint=$F("default_centerpoint").split(",");var default_zoom=parseInt($F("default_zoom"));if(default_zoom<CRITICAL_ZOOM)
{MAP_RESET_QUICK=true;}
var panorama=map.getStreetView();if(panorama.getVisible())
{panorama.setVisible(false);}
map.setCenter(new google.maps.LatLng(parseFloat(default_centerpoint[0]),parseFloat(default_centerpoint[1])));map.setZoom(default_zoom);}
function showStreetView(listing_id){if(listing_id){selectListing(listing_id);}else{alert("cannot show streetview because no listing was specified");return;}
var panorama=map.getStreetView();if(panorama.getVisible())
{panorama.setVisible(false);}
else
{latlng=MARKERS[LISTING_MARKERS[listing_id].marker_id].getPosition();sv_service=new google.maps.StreetViewService();sv_service.getPanoramaByLocation(latlng,50,function(data,status){if(status==google.maps.StreetViewStatus.OK){panorama.setPosition(latlng);panorama.setVisible(true);}
else{alert("Sorry, street view is unavailable for this location.");}});}}
function locationHasStreetView(listing_id)
{latlng=MARKERS[LISTING_MARKERS[listing_id].marker_id].getPosition();var svservice=new google.maps.StreetViewService();svservice.getPanoramaByLocation(latlng,50,function(data,status){if(status==google.maps.StreetViewStatus.OK){return true;}else{return false;}});}
function showMoreInfo(listing_id){if(listing_id){selectListing(listing_id);}else{alert("cannot show details because no listing was specified");return;}
var mlsparts=listing_id.split("_",2);var mls_id=mlsparts[0];var mls_no=mlsparts[1];var details_url="?";new Ajax.Request(details_url,{method:'post',parameters:{controller:'ListingSearch',action:'details',mls_id:mls_id,mls_no:mls_no,from:'map_search'},onSuccess:function(transport){var resultsHTML=transport.responseText;if(resultsHTML!="register"){$("MapSearchDetails").update(resultsHTML);attachListingDetailEvents("map");attachSaveListingEvents();sendPageHeightToParent();}else{$("MapSearchDetails").update("<div style='padding:20px; text-align:center; font-weight:bold;'>Please register or login to continue to view listing details.<br />Redirecting to the registration page now.</div>");window.location="/web/"+ACNT+"/WebUser/register/";}},onFailure:function(){alert("The ajax request failed - was trying to show the details for a listing.");}});}
var sprite=IMG_BASE_URL+"listing_icons_sprite.png";var house_icon_size=new google.maps.Size(23,26);var house_icon_anchor=new google.maps.Point(3,26);var houses_icon_size=new google.maps.Size(27,30);var houses_icon_anchor=new google.maps.Point(3,30);var condo_icon_size=new google.maps.Size(19,26);var condo_icon_anchor=new google.maps.Point(0,26);var condos_icon_size=new google.maps.Size(25,33);var condos_icon_anchor=new google.maps.Point(0,33);var listing_icon_array=Array();listing_icon_array['house']=new Array();listing_icon_array['house']['shadow']=new google.maps.MarkerImage(sprite,new google.maps.Size(32,34),new google.maps.Point(0,0),new google.maps.Point(7,30));listing_icon_array['house']['1']=new google.maps.MarkerImage(sprite,house_icon_size,new google.maps.Point(32,0),house_icon_anchor);listing_icon_array['house']['2']=new google.maps.MarkerImage(sprite,houses_icon_size,new google.maps.Point(55,0),houses_icon_anchor);listing_icon_array['house']['3']=new google.maps.MarkerImage(sprite,houses_icon_size,new google.maps.Point(82,0),houses_icon_anchor);listing_icon_array['house']['4']=new google.maps.MarkerImage(sprite,houses_icon_size,new google.maps.Point(109,0),houses_icon_anchor);listing_icon_array['house']['5']=new google.maps.MarkerImage(sprite,houses_icon_size,new google.maps.Point(136,0),houses_icon_anchor);listing_icon_array['house']['plus']=new google.maps.MarkerImage(sprite,houses_icon_size,new google.maps.Point(163,0),houses_icon_anchor);listing_icon_array['house']['1_sel']=new google.maps.MarkerImage(sprite,house_icon_size,new google.maps.Point(190,0),house_icon_anchor);listing_icon_array['house']['2_sel']=new google.maps.MarkerImage(sprite,houses_icon_size,new google.maps.Point(213,0),houses_icon_anchor);listing_icon_array['house']['3_sel']=new google.maps.MarkerImage(sprite,houses_icon_size,new google.maps.Point(240,0),houses_icon_anchor);listing_icon_array['house']['4_sel']=new google.maps.MarkerImage(sprite,houses_icon_size,new google.maps.Point(267,0),houses_icon_anchor);listing_icon_array['house']['5_sel']=new google.maps.MarkerImage(sprite,houses_icon_size,new google.maps.Point(294,0),houses_icon_anchor);listing_icon_array['house']['plus_sel']=new google.maps.MarkerImage(sprite,houses_icon_size,new google.maps.Point(321,0),houses_icon_anchor);listing_icon_array['condo']=new Array();listing_icon_array['condo']['shadow']=new google.maps.MarkerImage(sprite,new google.maps.Size(29,34),new google.maps.Point(0,34),new google.maps.Point(5,30));listing_icon_array['condo']['1']=new google.maps.MarkerImage(sprite,condo_icon_size,new google.maps.Point(32,34),condo_icon_anchor);listing_icon_array['condo']['2']=new google.maps.MarkerImage(sprite,condos_icon_size,new google.maps.Point(55,34),condos_icon_anchor);listing_icon_array['condo']['3']=new google.maps.MarkerImage(sprite,condos_icon_size,new google.maps.Point(82,34),condos_icon_anchor);listing_icon_array['condo']['4']=new google.maps.MarkerImage(sprite,condos_icon_size,new google.maps.Point(109,34),condos_icon_anchor);listing_icon_array['condo']['5']=new google.maps.MarkerImage(sprite,condos_icon_size,new google.maps.Point(136,34),condos_icon_anchor);listing_icon_array['condo']['plus']=new google.maps.MarkerImage(sprite,condos_icon_size,new google.maps.Point(163,34),condos_icon_anchor);listing_icon_array['condo']['1_sel']=new google.maps.MarkerImage(sprite,condo_icon_size,new google.maps.Point(190,34),condo_icon_anchor);listing_icon_array['condo']['2_sel']=new google.maps.MarkerImage(sprite,condos_icon_size,new google.maps.Point(213,34),condos_icon_anchor);listing_icon_array['condo']['3_sel']=new google.maps.MarkerImage(sprite,condos_icon_size,new google.maps.Point(240,34),condos_icon_anchor);listing_icon_array['condo']['4_sel']=new google.maps.MarkerImage(sprite,condos_icon_size,new google.maps.Point(267,34),condos_icon_anchor);listing_icon_array['condo']['5_sel']=new google.maps.MarkerImage(sprite,condos_icon_size,new google.maps.Point(294,34),condos_icon_anchor);listing_icon_array['condo']['plus_sel']=new google.maps.MarkerImage(sprite,condos_icon_size,new google.maps.Point(321,34),condos_icon_anchor);function updateListingMarker(id,action,listing_id)
{if(MARKERS[id]!='undefined')
{switch(action)
{case'addlisting':if(!MARKERS[id].listings[listing_id])
{MARKERS[id].listings[listing_id]=listing_id.split("_");MARKERS[id].nolistings++;var number_of_listings=MARKERS[id].nolistings;if(number_of_listings>5)number_of_listings='plus';var listing_icon=listing_icon_array[MARKERS[id].property_type][number_of_listings];var listing_icon_selected=listing_icon_array[MARKERS[id].property_type][number_of_listings+'_sel'];MARKERS[id].customicon=listing_icon;MARKERS[id].customicon_selected=listing_icon_selected;MARKERS[id].setIcon(listing_icon);}
break;case'removelisting':if(MARKERS[id].listings[listing_id])
{delete MARKERS[id].listings[listing_id];MARKERS[id].nolistings--;var number_of_listings=MARKERS[id].nolistings;if(number_of_listings>5)number_of_listings='plus';if(number_of_listings<=0)
{if(MARKERS[id].infoWindow)
{MARKERS[id].infoWindow.close();}
if(MARKERS[id].panoWindow)
{MARKERS[id].panoWindow.close();}
MARKERS[id].setMap(null);delete MARKERS[id];return;}
var listing_icon=listing_icon_array[MARKERS[id].property_type][number_of_listings];var listing_icon_selected=listing_icon_array[MARKERS[id].property_type][number_of_listings+'_sel'];MARKERS[id].customicon=listing_icon;MARKERS[id].customicon_selected=listing_icon_selected;MARKERS[id].setIcon(listing_icon);}
break;}}}
function createListingMarker(mls_id,mls_no,lat,lng,map,property_type){var listing_icon=listing_icon_array[property_type]['1'];var listing_icon_selected=listing_icon_array[property_type]['1_sel'];var listing_icon_shadow=listing_icon_array[property_type]['shadow'];if(LISTING_MARKERS)
{for(i in LISTING_MARKERS)
{if(LISTING_MARKERS[i].property_type==property_type)
{var d=distanceBetween(lat,lng,LISTING_MARKERS[i].lat,LISTING_MARKERS[i].lng);if(d<=25)
{updateListingMarker(LISTING_MARKERS[i].marker_id,'addlisting',mls_id+"_"+mls_no);return LISTING_MARKERS[i].marker_id;}}}}
var latnum=new Number(lat);var lngnum=new Number(lng);var latlngindex=latnum.toFixed(4).toString()+lngnum.toFixed(4).toString();var point=new google.maps.LatLng(lat,lng);var markerOptions={icon:listing_icon,position:point,map:map,shadow:listing_icon_shadow};var listingmarker=new google.maps.Marker(markerOptions);listingmarker.id=latlngindex;listingmarker.active=false;listingmarker.customicon=listing_icon;listingmarker.customicon_selected=listing_icon_selected;listingmarker.property_type=property_type;listingmarker.listings=new Object();listingmarker.listings[mls_id+"_"+mls_no]=[mls_id,mls_no];listingmarker.nolistings=1;google.maps.event.addListener(listingmarker,"mouseover",function(only_this_id){if(listingmarker.active!=true){listingmarker.setIcon(listingmarker.customicon_selected);if(only_this_id&&typeof only_this_id!='object')
{highlightListing(only_this_id);return;}
for(x in listingmarker.listings)
{highlightListing(x);}}});google.maps.event.addListener(listingmarker,"mouseout",function(only_this_id){if(listingmarker.active!=true){listingmarker.setIcon(listingmarker.customicon);for(x in listingmarker.listings)
{deselectListing(x);}}});google.maps.event.addListener(listingmarker,"click",function(){if(listingmarker.active!=true){listingmarker.active=true;for(x in listingmarker.listings)
{CURRENT_LISTING_ID=x;break;}
listingmarker.setIcon(listingmarker.customicon_selected);selectListing(CURRENT_LISTING_ID);var infowindow_html;var infowindow_url="?";var params=new Object();params.controller='ListingSearch';params.action='info_window';params.product='web';params.infowindow=1;params.from='map_search';params.mls_ids='##';var how_many=0;for(x in listingmarker.listings)
{how_many++;params.mls_ids+=x+'##';}
params.how_many=how_many;var boxClass=(how_many>1)?'listing_info_window_grouped':'listing_info_window';var boxWidth=(how_many>1)?'255px':'235px';var boxShadow=(how_many>1)?'<img src="/images/gmap/listing_info_window_grouped_shadow.png" />':'<img src="/images/gmap/listing_info_window_shadow.png" />';var boxShadowOffset=(how_many>1)?new google.maps.Size(28,10):new google.maps.Size(28,-30);new Ajax.Request(infowindow_url,{method:'post',parameters:params,onSuccess:function(transport){infowindow_html=transport.responseText;var info_window_options={latlng:listingmarker.getPosition(),map:map,boxClass:boxClass,content:infowindow_html,pixelOffset:new google.maps.Size(28,-60),boxStyle:{width:boxWidth},infoBoxClearance:new google.maps.Size(1,1),shadow:boxShadow,shadowOffset:boxShadowOffset};var pano_window_options={latlng:listingmarker.getPosition(),map:map,boxClass:boxClass,content:infowindow_html,disableAutoPan:true,pixelOffset:new google.maps.Size(28,-160),boxStyle:{width:boxWidth},infoBoxClearance:new google.maps.Size(1,1)};var latlng=listingmarker.getPosition();var svservice=new google.maps.StreetViewService();svservice.getPanoramaByLocation(latlng,50,function(data,status){if(status==google.maps.StreetViewStatus.OK){var has_street_view=true;}else{var has_street_view=false;}
if(has_street_view)
{info_window_options.content=info_window_options.content.replace(/class="btn_street_view_na"/g,'style="display: none;"');pano_window_options.content=pano_window_options.content.replace(/class="btn_street_view_na"/g,'style="display: none;"');}
listingmarker.infoWindow=new InfoBox(info_window_options);listingmarker.infoWindow.open(map,listingmarker);var panorama=map.getStreetView();listingmarker.panoWindow=new InfoBox(pano_window_options);listingmarker.panoWindow.open(panorama,listingmarker);if(has_street_view)
{if(panorama.getVisible())
{google.maps.event.trigger(map,'resize');google.maps.event.trigger(panorama,'resize');}
google.maps.event.addListener(listingmarker.panoWindow,"closeclick",function(){if(listingmarker.active==true){listingmarker.infoWindow.close();listingmarker.active=false;listingmarker.setIcon(listingmarker.customicon);deselectListing(listingmarker.id);$("MapTabDetails").hide();}else{listingmarker.active=false;}});}
google.maps.event.addListener(listingmarker.infoWindow,"closeclick",function(){if(listingmarker.active==true){if(has_street_view)
{listingmarker.panoWindow.close();}
listingmarker.active=false;listingmarker.setIcon(listingmarker.customicon);deselectListing(listingmarker.id);$("MapTabDetails").hide();}else{listingmarker.active=false;}});});},onFailure:function(){alert("The ajax request failed - was trying to retrieve this listing's information to show in the info window.");}});}
else
{listingmarker.infoWindow.close();listingmarker.panoWindow.close();listingmarker.active=false;deselectListing(listingmarker.id);$("MapTabDetails").hide();}});MARKERS[listingmarker.id]=listingmarker;return listingmarker.id;}
function refreshListingResults(pagenumber){hideCityMarkers();$("MapMsg").update("Use the Locate buttons to find the listings on the map.");var mypage;if(pagenumber){mypage=pagenumber;}else{mypage=1;}
var filters=$("FilterForm").serialize(true);if(mypage!=CURRENT_PAGE){filter_has_changed=true;}else{$H(filters).each(function(pair){if($H(FILTERS).get(pair.key)!=pair.value){filter_has_changed=true;throw $break;}});}
saveGlobalFilters();CURRENT_PAGE=mypage;VIEWING_RESULTS_SET=true;var ajax_url="?";var filters2=$("FilterForm").serialize();ajax_url+=filters2;new Ajax.Request(ajax_url,{method:'post',parameters:{controller:'ListingSearch',action:'results',SEARCH_viewport:$("SEARCH_viewport").getValue(),SEARCH__page__:mypage,SEARCH__lpp__:LISTINGS_PER_PAGE,map_results:1,from:'map_search'},onSuccess:function(transport){var resultsHTML=transport.responseText;$("MapSearchResults").update(resultsHTML);},onFailure:function(){$("MapSearchResults").update("Ajax failed");}});}
function addListingMarker(mls_id,mls_no,lat,lng){var listing_id=mls_id+"_"+mls_no;if(!LISTING_MARKERS[listing_id]){var marker=new Object();var marker_id=createListingMarker(mls_id,mls_no,lat,lng,map,"house");marker.marker_id=marker_id
LISTING_MARKERS[listing_id]=marker;}}
function refreshListingMarkers(){if(MAP_RESET==true){$("MapMsg").update("To see listings, please choose a city or <a href='' onclick='map.setZoom(map.getZoom() + 1); return false;'>zoom in</a>.");ZOOM_NOTICE_DIRECTION='in';showZoomNotice("To see listings, please choose a city or zoom in.");resetFilters();if(MAP_RESET_QUICK)
{showCityMarkers();for(x in LISTING_MARKERS){updateListingMarker(LISTING_MARKERS[x].marker_id,'removelisting',x);delete LISTING_MARKERS[x];;}}
$("MapSearchLoading").hide();MAP_RESET=false;if(MAP_RESET_QUICK)
{MAP_RESET_QUICK=false;return;}}
if(filtersHaveChanged()||FORCE_REFRESH_MARKERS){FORCE_REFRESH_MARKERS=false;saveGlobalFilters();$("MapSearchLoadingMsg").update("Updating map... please wait.");$("MapSearchLoading").show();var json_url="?";var filters=$("FilterForm").serialize();json_url+="&"+filters;new Ajax.Request(json_url,{method:'post',parameters:{controller:'ListingSearch',action:'results',from:'map_search'},onSuccess:function(transport){var json=transport.responseJSON;var total_listings=json.total_listings;var listings=json.listings;if(listings==0){if(total_listings==0){$("MapMsg").update("<strong>"+total_listings+"</strong> listings in the current map area. Please <a href='' onclick='map.setZoom(map.getZoom() - 1); return false'>zoom out</a> or select different search filters.");ZOOM_NOTICE_DIRECTION='out';showZoomNotice("<strong>"+total_listings+"</strong> listings found. Please zoom out or select different search filters.");}else{ZOOM_NOTICE_DIRECTION='in';$("MapMsg").update("<strong>"+total_listings+"</strong> listings in the current map area. Please continue to <a href='' onclick='map.setZoom(map.getZoom() + 1); return false'>zoom in</a>.");showZoomNotice("<strong>"+total_listings+"</strong> listings in the current map area. Please continue to zoom in.");}
showCityMarkers();for(x in LISTING_MARKERS){updateListingMarker(LISTING_MARKERS[x].marker_id,'removelisting',x);delete LISTING_MARKERS[x];}
$("MapSearchLoading").hide();}else{$("MapMsg").update("<strong>"+total_listings+"</strong> listings showing on the map.");hideCityMarkers();var batch=new Object;$(listings).each(function(s){var listing_id=s.mls_id+"_"+s.mls_no;batch[listing_id]=true;var property_type="house";if(s.type=='Co-op'||s.type=='Two Family Home'||s.type=='Timeshare'||s.type=='Co-Operative'||s.type=='Condo'||s.type=='Townhouse'||s.type=='Condo/Townhouse'||s.type=='Multi Family Home')
{property_type="condo"}
if(!LISTING_MARKERS[listing_id]){var marker=new Object();var marker_id=createListingMarker(s.mls_id,s.mls_no,s.lat,s.lng,map,property_type);marker.marker_id=marker_id;marker.property_type=property_type;marker.price=parseInt(s.rawprice);marker.sqft=parseInt(s.sqft);marker.lotsize=parseFloat(s.lotsize);marker.lat=s.lat;marker.lng=s.lng;var latnum=new Number(s.lat);var lngnum=new Number(s.lng);var latlngindex=latnum.toFixed(4).toString()+lngnum.toFixed(4).toString();LISTING_MARKERS[listing_id]=marker;}});var price_list=new Array();var sqft_list=new Array();var lotsize_list=new Array();var price_sum=0;var sqft_sum=0;var lotsize_sum=0;for(x in LISTING_MARKERS){if(!batch[x]){updateListingMarker(LISTING_MARKERS[x].marker_id,'removelisting',x);delete LISTING_MARKERS[x];}
else{if(LISTING_MARKERS[x].price>0)
{price_sum+=LISTING_MARKERS[x].price;price_list.push(LISTING_MARKERS[x].price);}
if(LISTING_MARKERS[x].sqft>0)
{sqft_list.push(LISTING_MARKERS[x].sqft);sqft_sum+=LISTING_MARKERS[x].sqft;}
if(LISTING_MARKERS[x].lotsize>0)
{lotsize_list.push(LISTING_MARKERS[x].lotsize);lotsize_sum+=LISTING_MARKERS[x].lotsize;}}}
$("MapSearchLoading").hide();price_list.sort(function(a,b){return a-b});sqft_list.sort(function(a,b){return a-b});lotsize_list.sort(function(a,b){return a-b});if(price_list.length>0)
{var price_average=parseInt(price_sum/price_list.length);var price_median=price_list[parseInt(price_list.length/2)];var price_low=price_list[0];var price_high=price_list[price_list.length-1];}
else
{var price_average=0;var price_median=0;var price_low=0;var price_high=0;}
if(sqft_list.length>0)
{var sqft_average=parseInt(sqft_sum/sqft_list.length);var sqft_median=sqft_list[parseInt(sqft_list.length/2)];var sqft_low=sqft_list[0];var sqft_high=sqft_list[sqft_list.length-1];}
else
{var sqft_average=0;var sqft_median=0;var sqft_low=0;var sqft_high=0;}
if(lotsize_list.length>0)
{var lotsize_average=lotsize_sum/lotsize_list.length;var lotsize_median=lotsize_list[parseInt(lotsize_list.length/2)];var lotsize_low=lotsize_list[0];var lotsize_high=lotsize_list[lotsize_list.length-1];}
else
{var lotsize_average=0;var lotsize_median=0;var lotsize_low=0;var lotsize_high=0;}
$("price_average").innerHTML="$"+addCommasToNumber(price_average);$("price_median").innerHTML="$"+addCommasToNumber(price_median);$("price_low").innerHTML="$"+addCommasToNumber(price_low);$("price_high").innerHTML="$"+addCommasToNumber(price_high);$("sqft_average").innerHTML=addCommasToNumber(sqft_average);$("sqft_median").innerHTML=addCommasToNumber(sqft_median);$("sqft_low").innerHTML=addCommasToNumber(sqft_low);$("sqft_high").innerHTML=addCommasToNumber(sqft_high);$("lotsize_average").innerHTML=lotsize_average.toFixed(3)+" acres";$("lotsize_median").innerHTML=lotsize_median+" acres";$("lotsize_low").innerHTML=lotsize_low+" acres";$("lotsize_high").innerHTML=lotsize_high+" acres";}},onFailure:function(){alert('The ajax request failed - was trying to create/refresh listing markers on the map.');$("MapSearchLoading").hide();}});}}
function createCityMarker(city_data,citypoint,map){var city_icon=new google.maps.MarkerImage(IMG_BASE_URL+"map_icons_sprite.png",new google.maps.Size(23,26),new google.maps.Point(0,0),new google.maps.Point(8,24));var city_icon_selected=new google.maps.MarkerImage(IMG_BASE_URL+"map_icons_sprite.png",new google.maps.Size(23,26),new google.maps.Point(23,0),new google.maps.Point(8,24));var city_icon_shadow=new google.maps.MarkerImage(IMG_BASE_URL+"map_icons_sprite.png",new google.maps.Size(31,34),new google.maps.Point(0,26),new google.maps.Point(12,27));var markerOptions={icon:city_icon,position:citypoint,map:map,shadow:city_icon_shadow};var citymarker=new google.maps.Marker(markerOptions);if(city_data.latlng_cnt!=0)
{citymarker.cityinfohtml='<div class="city_name">'+city_data.name+'</div><div class="city_info"><span class="listing_count">'+city_data.latlng_cnt+' listings</span><span class="avg_price">Average Price: $'+addCommasToNumber(parseInt(city_data.avg_price))+'</span><span class="med_price">Average Sq.Ft.: '+addCommasToNumber(parseInt(city_data.avg_sqft))+'</span></div>';}
else
{citymarker.cityinfohtml='<div class="city_name">'+city_data.name+'</div><div class="city_info"><span class="listing_count">'+city_data.latlng_cnt+' listings</span></div>';}
google.maps.event.addListener(citymarker,"mouseover",function(){citymarker.setIcon(city_icon_selected);showCityInfo(citymarker,map);});google.maps.event.addListener(citymarker,"mouseout",function(){citymarker.setIcon(city_icon);hideCityInfo(citymarker);});google.maps.event.addListener(citymarker,"click",function(){hideCityInfo(citymarker);map.setCenter(citypoint);var current_zoom=map.getZoom();if(current_zoom<CRITICAL_ZOOM)
{map.setZoom(CRITICAL_ZOOM);}
else
{map.setZoom(current_zoom+1);}
refreshCrumbtrail();processMapChange();});return citymarker;}
function setupCityMarkers(){$("MapSearchLoadingMsg").update("Loading Cities... please wait.");var json_url="?";new Ajax.Request(json_url,{method:'post',parameters:{controller:'ListingSearch',action:'get_cities_with_stats',from:'map_search'},onSuccess:function(transport){var cities=transport.responseJSON;if(cities!=""){var cities_count=$(cities).size();var all_city_bounds=new google.maps.LatLngBounds();var city_count=0;function loadMarkerBatch(marker_batch){$(marker_batch).each(function(city_data,index){var name_in_caps=city_data.name.toUpperCase();if(city_data.lat&&city_data.lng&&!CITY_MARKERS[name_in_caps]){var citypoint=new google.maps.LatLng(parseFloat(city_data.lat),parseFloat(city_data.lng));if(!all_city_bounds.contains(citypoint)){all_city_bounds.extend(citypoint);}
var marker=createCityMarker(city_data,citypoint,map);marker.listing_count=parseInt(city_data.latlng_cnt);marker.avg_price=parseInt(city_data.avg_price);marker.max_price=parseInt(city_data.max_price);marker.min_price=parseInt(city_data.min_price);marker.avg_sqft=parseInt(city_data.avg_sqft);marker.max_sqft=parseInt(city_data.max_sqft);marker.min_sqft=parseInt(city_data.min_sqft);marker.avg_lot=parseFloat(city_data.avg_lot);;marker.max_lot=parseFloat(city_data.max_lot);;marker.min_lot=parseFloat(city_data.min_lot);;CITY_MARKERS[name_in_caps]=marker;city_count++;}else{city_count++;}
if(cities_count==city_count){$("MapSearchLoading").hide();CITY_MARKERS_VISIBLE=true;$("SEARCH_viewport").value=map.getBounds();updateMapStatisticsByCityData();ZOOM_NOTICE_DIRECTION='in';showZoomNotice();}});}
$(cities).eachSlice(20,function(citygroup,groupindex){loadMarkerBatch.delay(groupindex*0.1,citygroup);});}else{MAP_RESET=true;$("MapSearchLoading").hide();CITY_MARKERS_VISIBLE=true;$("SEARCH_viewport").value=map.getBounds();updateMapStatisticsByCityData();ZOOM_NOTICE_DIRECTION='in';showZoomNotice();}},onFailure:function(){alert('The ajax request failed - was trying to create city markers on the map.');$("MapSearchLoading").hide();}});}
function hideCityMarkers(){for(x in CITY_MARKERS){$(CITY_MARKERS[x]).setVisible(false);}
CITY_MARKERS_VISIBLE=false;}
function showCityMarkers(){for(x in CITY_MARKERS){$(CITY_MARKERS[x]).setVisible(true);}
CITY_MARKERS_VISIBLE=true;}
function showCityInfo(marker,map){var info_window_options={latlng:marker.getPosition(),map:map,boxClass:'city_info_window',content:marker.cityinfohtml,disableAutoPan:true,pixelOffset:new google.maps.Size(16,-50),closeBoxURL:"",infoBoxClearance:new google.maps.Size(1,1),shadow:'<img src="/images/gmap/city_info_window_shadow.png" />',shadowOffset:new google.maps.Size(16,-20)};marker.infoWindow=new InfoBox(info_window_options);marker.infoWindow.open(map,marker);}
function hideCityInfo(marker){marker.infoWindow.close();}
function hideListingMarker(marker){if(marker.infoWindow)
{marker.infoWindow.close();}
if(marker.panoWindow)
{marker.panoWindow.close();}
marker.setMap(null);}
function processMapChange(){CURRENT_CENTERPOINT=map.getCenter();$("zoom_level").innerHTML=map.getZoom();$("ctr_coords").innerHTML=map.getCenter().toUrlValue();$("bounds_coords").innerHTML=map.getBounds();if(BOUNDS_LOCKED==false){$("SEARCH_viewport").value=map.getBounds();$("SEARCH_zoom").value=map.getZoom();$("SEARCH_centerpoint").value=map.getCenter().toUrlValue();refreshListingMarkers();}}
function updateMapStatisticsByCityData(){var price_sum=0;var sqft_sum=0;var lotsize_sum=0;var price_count=0;var sqft_count=0;var lotsize_count=0;var price_average=0;var price_low=0;var price_high=0;var sqft_average=0;var sqft_low=0;var sqft_high=0;var lotsize_average=0;var lotsize_low=0;var lotsize_high=0;var map_bounds=map.getBounds();for(index in CITY_MARKERS)
{marker_position=CITY_MARKERS[index].getPosition();if(CITY_MARKERS[index].listing_count>0&&map_bounds.contains(marker_position))
{if(CITY_MARKERS[index].avg_price)
{price_count+=CITY_MARKERS[index].listing_count;price_sum+=CITY_MARKERS[index].avg_price*CITY_MARKERS[index].listing_count;}
if(CITY_MARKERS[index].max_price>price_high)
{price_high=CITY_MARKERS[index].max_price;}
if(CITY_MARKERS[index].min_price<price_low||price_low==0)
{price_low=CITY_MARKERS[index].min_price;}
if(CITY_MARKERS[index].avg_sqft)
{sqft_count+=CITY_MARKERS[index].listing_count;sqft_sum+=CITY_MARKERS[index].avg_sqft*CITY_MARKERS[index].listing_count;}
if(CITY_MARKERS[index].max_sqft>sqft_high)
{sqft_high=CITY_MARKERS[index].max_sqft;}
if(CITY_MARKERS[index].min_sqft<sqft_low||sqft_low==0)
{sqft_low=CITY_MARKERS[index].min_sqft;}
if(CITY_MARKERS[index].avg_lot)
{lotsize_count+=CITY_MARKERS[index].listing_count;lotsize_sum+=CITY_MARKERS[index].avg_lot*CITY_MARKERS[index].listing_count;}
if(CITY_MARKERS[index].max_lot>lotsize_high)
{lotsize_high=CITY_MARKERS[index].max_lot;}
if(CITY_MARKERS[index].min_lot<lotsize_low||lotsize_low==0)
{lotsize_low=CITY_MARKERS[index].min_lot;}}}
if(price_count>0)
{price_average=parseInt(price_sum/price_count);}
if(sqft_count>0)
{sqft_average=parseInt(sqft_sum/sqft_count);}
if(lotsize_count>0)
{lotsize_average=lotsize_sum/lotsize_count;}
$("price_average").innerHTML="$"+addCommasToNumber(price_average);$("price_median").innerHTML="N/A";$("price_low").innerHTML="$"+addCommasToNumber(price_low);$("price_high").innerHTML="$"+addCommasToNumber(price_high);$("sqft_average").innerHTML=addCommasToNumber(sqft_average);$("sqft_median").innerHTML="N/A";$("sqft_low").innerHTML=addCommasToNumber(sqft_low);$("sqft_high").innerHTML=addCommasToNumber(sqft_high);$("lotsize_average").innerHTML=lotsize_average.toFixed(3)+" acres";$("lotsize_median").innerHTML="N/A";$("lotsize_low").innerHTML=lotsize_low+" acres";$("lotsize_high").innerHTML=lotsize_high+" acres";}
function showZoomNotice(notice_text)
{notice_text=typeof(notice_text)!='undefined'?notice_text:'';if(notice_text!='')
{$("MS_ZoomNotice_Body").update(notice_text);}
new Effect.Appear("MS_ZoomNotice",{duration:0.5,delay:2,queue:{position:'end',scope:'zoomnoticeappear',limit:1},afterFinish:function(){new Effect.Fade("MS_ZoomNotice",{duration:0.75,delay:5,queue:{position:'end',scope:'zoomnoticefade',limit:1}});}});}
function hideZoomNotice()
{Effect.Queues.get('zoomnoticefade').invoke('cancel');new Effect.Fade("MS_ZoomNotice",{duration:0.75,delay:0,queue:{position:'front',scope:'zoomnoticefade',limit:1}});}
function saveGlobalFilters(){FILTERS=$("FilterForm").serialize(getHash=true);}
function filtersHaveChanged(){var changedStatus=false;var filters=$("FilterForm").serialize(true);$H(filters).each(function(pair){if($H(FILTERS).get(pair.key)!=pair.value){changedStatus=pair.key;throw $break;}});return changedStatus;}
function resetFilters(){$("SEARCH_city").value='';$("SEARCH_minprice").options[0].selected=true;$("SEARCH_maxprice").options[0].selected=true;$("SEARCH_bedrooms").options[0].selected=true;$("SEARCH_baths").options[0].selected=true;$("SEARCH_sqft").options[0].selected=true;refreshCrumbtrail();}
function refreshCrumbtrail(){var city,minprice,maxprice,bedrooms,baths,sqft,type;city=$("SEARCH_city").value;minprice=$("SEARCH_minprice").options[$("SEARCH_minprice").selectedIndex].text;maxprice=$("SEARCH_maxprice").options[$("SEARCH_maxprice").selectedIndex].text;bedrooms=$("SEARCH_bedrooms").options[$("SEARCH_bedrooms").selectedIndex].text;baths=$("SEARCH_baths").options[$("SEARCH_baths").selectedIndex].text;sqft=$("SEARCH_sqft").options[$("SEARCH_sqft").selectedIndex].text;$("CRUMB_city").update("city:&nbsp;<strong>"+city+"</strong>;&nbsp; ");$("CRUMB_minprice").update("min.&nbsp;price:&nbsp;<strong>"+minprice+"</strong>;&nbsp; ");$("CRUMB_maxprice").update("max.&nbsp;price:&nbsp;<strong>"+maxprice+"</strong>;&nbsp; ");$("CRUMB_bedrooms").update("beds:&nbsp;<strong>"+bedrooms+"</strong>;&nbsp; ");$("CRUMB_baths").update("baths:&nbsp;<strong>"+baths+"</strong>;&nbsp; ");$("CRUMB_sqft").update("sq.&nbsp;ft.:&nbsp;<strong>"+sqft+"</strong>;&nbsp; ");if(city==""){$("CRUMB_city").hide();}else{$("CRUMB_city").show();}
if(minprice=="No Min."){$("CRUMB_minprice").hide();}else{$("CRUMB_minprice").show();}
if(maxprice=="No Max."){$("CRUMB_maxprice").hide();}else{$("CRUMB_maxprice").show();}
if(bedrooms=="Any"){$("CRUMB_bedrooms").hide();}else{$("CRUMB_bedrooms").show();}
if(baths=="Any"){$("CRUMB_baths").hide();}else{$("CRUMB_baths").show();}
if(sqft=="Any"){$("CRUMB_sqft").hide();}else{$("CRUMB_sqft").show();}}
function load(){$("MapSearchLoadingMsg").update("Map is loading... please wait.");$("MapSearchLoading").show();var starting_zoom;var starting_centerpoint;var starting_map_type;var scrollwheel_enabled=$F("map_mousewheel_disable")=='Y'?false:true;if($F("SEARCH_centerpoint")!=""&&$F("SEARCH_zoom")!=''){starting_centerpoint=$F("SEARCH_centerpoint");starting_zoom=parseInt($F("SEARCH_zoom"));SAVED_SEARCH=true;}else{starting_centerpoint=$F("default_centerpoint");starting_zoom=parseInt($F("default_zoom"));}
switch($F("default_map_type"))
{case'HYBRID':starting_map_type=google.maps.MapTypeId.HYBRID;break;case'ROADMAP':starting_map_type=google.maps.MapTypeId.ROADMAP;break;case'SATELLITE':starting_map_type=google.maps.MapTypeId.SATELLITE;break;case'TERRAIN':starting_map_type=google.maps.MapTypeId.TERRAIN;break;default:starting_map_type=google.maps.MapTypeId.TERRAIN;}
var ctrpt=starting_centerpoint.split(",");var latlng=new google.maps.LatLng(ctrpt[0],ctrpt[1]);var mapOptions={zoom:starting_zoom,scrollwheel:scrollwheel_enabled,center:latlng,mapTypeId:starting_map_type,scaleControl:true};map=new google.maps.Map(document.getElementById("Map"),mapOptions);attachMapSearchEvents();setupCityMarkers();google.maps.event.addListener(map,"zoom_changed",function(){if(map.getMapTypeId()==google.maps.MapTypeId.TERRAIN&&map.getZoom()>=15&&$("zoom_level").innerHTML==map.getZoom())
{map.setMapTypeId(google.maps.MapTypeId.ROADMAP);map.setZoom(map.getZoom+1);}});google.maps.event.addListener(map,"idle",function(){if((map.getZoom()<CRITICAL_ZOOM&&$("zoom_level").innerHTML>=CRITICAL_ZOOM))
{MAP_RESET=true;MAP_RESET_QUICK=true;processMapChange();}
else if((map.getZoom()>=CRITICAL_ZOOM))
{processMapChange();}
else if(CITY_MARKERS_VISIBLE)
{showZoomNotice();}
if(CITY_MARKERS_VISIBLE)
{updateMapStatisticsByCityData();}});CURRENT_CENTERPOINT=map.getCenter();$("SEARCH_viewport").value=map.getBounds();$("SEARCH_centerpoint").value=map.getCenter().toUrlValue();$("SEARCH_zoom").value=map.getZoom();$("zoom_level").innerHTML=map.getZoom();$("bounds_coords").innerHTML=map.getBounds();$("ctr_coords").innerHTML=map.getCenter().toUrlValue();google.maps.event.addListener(map,"click",function(point){var coordinates;coordinates=point.latLng.toString();$("click_coords").innerHTML="";$("click_coords").innerHTML=coordinates;});}
function timedhidemenu(){FILTER_MENU_TIMER=Element.hide.delay(1,'FilterMenu');}
function attachMapSearchEvents(){$('MapTabResults').observe('click',function(event){Event.stop(event);toggleFrame('Results');});$('MapTabMap').observe('click',function(event){Event.stop(event);toggleFrame('Map');});$('MapTabDetails').observe('click',function(event){Event.stop(event);toggleFrame('Details');showMoreInfo(CURRENT_LISTING_ID);});$('MS_Statistics_Control').down('a').observe('mousedown',function(event){Event.stop(event);if($("MS_Statistics_Body").visible())
{new Effect.BlindLeft("MS_Statistics_Body",{duration:0.3});}
else
{new Effect.BlindRight("MS_Statistics_Body",{duration:0.3});}});$('BtnResetMap').observe('click',function(event){Event.stop(event);resetMap();});$('MS_ZoomNotice').observe('click',function(event){Event.stop(event);if(ZOOM_NOTICE_DIRECTION=='in')
{map.setZoom(map.getZoom()+1);}
else
{map.setZoom(map.getZoom()-1);}
hideZoomNotice();});$('BtnFilterMenu').observe('click',function(event){Event.stop(event);window.clearTimeout(FILTER_MENU_TIMER);toggleFilterMenu();});$('BtnFilterMenu').observe('mouseover',function(event){window.clearTimeout(FILTER_MENU_TIMER);});$("BtnCloseFilterMenu").observe('click',function(event){Event.stop(event);toggleFilterMenu();});$('BtnFilterMenu').observe('mouseout',timedhidemenu);$('FilterMenu').observe('mouseover',function(event){window.clearTimeout(FILTER_MENU_TIMER);$("FilterMenu").show();});$('FilterMenu').observe('mouseout',timedhidemenu);$('BtnRefreshResults').observe('click',function(event){toggleFilterMenu();refreshCrumbtrail();refreshListingMarkers()
if(filtersHaveChanged()=='SEARCH_city'&&$("SEARCH_city").value!=''){var city_marker_index=$("SEARCH_city").value.toUpperCase();if(CITY_MARKERS[city_marker_index]){google.maps.event.trigger(CITY_MARKERS[city_marker_index],"click");}}else{refreshListingMarkers();}
if($("MapSearchResults").visible()){refreshListingResults();}
Event.stop(event);});if(Prototype.Browser.IE){$$('#FilterMenu select').each(function(sel){$(sel).observe('focus',function(){$('FilterMenu').stopObserving('mouseout',timedhidemenu);});$(sel).observe('blur',function(){$('FilterMenu').observe('mouseout',timedhidemenu);});$(sel).observe('change',function(){$('FilterMenu').observe('mouseout',timedhidemenu);});});}
['SEARCH_minprice','SEARCH_maxprice','SEARCH_bedrooms','SEARCH_baths','SEARCH_sqft'].each(function(s){$(s).observe('change',function(){setTimeout('window.clearTimeout(FILTER_MENU_TIMER);',500);});});}
Event.observe(window,'load',function(){load();});
