var geocoder;var map;var m_pan=false;var polyControl=false;var polyState=false;var stateTownMode=false;var markers=[];$(window).load(function(){if($('.'+APP_M_KEY+'_pane_wrapper').length!=0){$('.'+APP_M_KEY+'_map_pane_loader').height($('#'+APP_M_KEY+'_map_pane').height());$('#StateOrProvince').bind('change',function(){$('#OfficialTown').attr("disabled",true);$("#OfficialTown").html('<option value="">Loading, please wait...</option>');loadTowns();if($('#StateOrProvince').val()==''){var cLatLng=new google.maps.LatLng(APP_S_LAT,APP_S_LONG);map.setCenter(cLatLng);map.setZoom(APP_S_ZOOM);}
clearSavedSearchData();if(polyControl&&polyControl.getPolyPoints()){polyControl.setState(false);}
snapStateTown();});$('#OfficialTown').bind('change',function(){if(polyControl&&polyControl.getPolyPoints()){polyControl.setState(false);}
snapStateTown();});$('#ListingPriceMin').bind('change',function(){execSearch();});$('#ListingPriceMax').bind('change',function(){execSearch();});$('.PropertyType').bind('change',function(){execSearch();});$('#view_all_button').bind('click',function(){var url=APP_R_PAGE+'property_search_action=search&';if($('#StateOrProvince').val()!=''&&$('#OfficialTown').val()!=''){url=url+"&town[]="+encodeURIComponent($('#OfficialTown').val()+", "+$('#StateOrProvince option:selected').text());}
else if($('#StateOrProvince').val()!=''){url=url+"&state="+$('#StateOrProvince option:selected').text();}
var ListingPriceMin=$('#ListingPriceMin').val();if(ListingPriceMin.length>0){url=url+'&ListingPriceMin='+escape(ListingPriceMin);}
var ListingPriceMax=$('#ListingPriceMax').val();if(ListingPriceMax.length>0){url=url+'&ListingPriceMax='+escape(ListingPriceMax);}
$('.PropertyType:checked').each(function(){url=url+'&PropertyType[]='+escape(this.value);});window.location=url;});$('#clear_button').bind('click',function(){clearSearch();});$('#list_button').bind('click',function(){if(APP_R_PAGE.length){var OfficialTown=getCookie(APP_M_KEY+'_OfficialTown');OfficialTown=(!$('#OfficialTown').attr("disabled")?$('#OfficialTown').val():(OfficialTown?OfficialTown:''));var url=APP_R_PAGE+'property_search_action=search&';var cMapBounds=map.getBounds();var cNorthEast=cMapBounds.getNorthEast();var cSouthWest=cMapBounds.getSouthWest();url=url+'lat_ne='+cNorthEast.lat()+'&lat_sw='+cSouthWest.lat()+'&long_ne='+cNorthEast.lng()+'&long_sw='+cSouthWest.lng();if($('#StateOrProvince').val()!=''&&OfficialTown!=''){url=url+"&town[]="+encodeURIComponent(OfficialTown+", "+$('#StateOrProvince option:selected').text());}
else if($('#StateOrProvince').val()!=''){url=url+"&state="+$('#StateOrProvince option:selected').text();}
if(polyControl&&polyControl.getPolyPoints()){var vertices=polyControl.getPolyPoints();vertices.getAt(0).forEach(function(value,index){url=url+"&lat[]="+value.lat()+"&long[]="+value.lng();});}
var ListingPriceMin=$('#ListingPriceMin').val();if(ListingPriceMin.length>0){url=url+'&ListingPriceMin='+escape(ListingPriceMin);}
var ListingPriceMax=$('#ListingPriceMax').val();if(ListingPriceMax.length>0){url=url+'&ListingPriceMax='+escape(ListingPriceMax);}
$('.PropertyType:checked').each(function(){url=url+'&PropertyType[]='+escape(this.value);});window.location=url;}});$('#mls_search_button').bind('click',function(){mlsNumSubmit();});$('#ListingID').keyup(function(e){if(e.keyCode==13){mlsNumSubmit();}});loadSavedSearchData();if(polyControl&&polyState){polyControl.restorePolyState(polyState);}}});function mlsNumSubmit(){if(APP_L_PAGE.length){var ListingID=$('#ListingID').val();ListingID=ListingID.replace(/[^0-9]/g,"");if(ListingID.length){window.location=APP_L_PAGE+'id='+ListingID+'&return=1';}
else{alert('Please enter a numeric MLS #');}}}
function clearSearch(){stateTownMode=false;$('#StateOrProvince').val('');$('#ListingPriceMin').val('');$('#ListingPriceMax').val('');$('.PropertyType').attr('checked',false);$('#OfficialTown').attr("disabled",true);$("#OfficialTown").html('<option value="">-Please select state-</option>');$('#OfficialTown').val('');clearSavedSearchData();loadMap(APP_S_LAT,APP_S_LONG,APP_S_ZOOM);}
function loadMap(currLat,currLong,currZoom){var LatLong=new google.maps.LatLng(currLat,currLong);var mOpts={zoom:currZoom,center:LatLong,mapTypeId:google.maps.MapTypeId.ROADMAP};geocoder=new google.maps.Geocoder();map=new google.maps.Map(document.getElementById(APP_M_KEY+'_map_pane'),mOpts);google.maps.event.addListener(map,'idle',function(){if(!m_pan){execSearch();}
m_pan=false;});var polyControlDiv=document.createElement('DIV');polyControl=new PolyControl(polyControlDiv,map);polyControlDiv.index=1;map.controls[google.maps.ControlPosition.TOP_RIGHT].push(polyControlDiv);}
function snapStateTown(){var OfficialTown=getCookie(APP_M_KEY+'_OfficialTown');OfficialTown=(!$('#OfficialTown').attr("disabled")?$('#OfficialTown').val():(OfficialTown?OfficialTown:''));stateTownMode=false;if($('#StateOrProvince').val()!=''&&OfficialTown!=''){stateTownMode=true;}
execSearch();}
function execSearch(){$('.'+APP_M_KEY+'_map_pane_loader').show();var cMapBounds=map.getBounds();var cNorthEast=cMapBounds.getNorthEast();var cSouthWest=cMapBounds.getSouthWest();var OfficialTown=getCookie(APP_M_KEY+'_OfficialTown');OfficialTown=(!$('#OfficialTown').attr("disabled")?$('#OfficialTown').val():(OfficialTown?OfficialTown:''));var url="action=query";if(!stateTownMode){url=url+"&lat_ne="+cNorthEast.lat()+"&lat_sw="+cSouthWest.lat()+"&long_ne="+cNorthEast.lng()+"&long_sw="+cSouthWest.lng()+"&z="+map.getZoom();}
else{url=url+"&snapStateTown=1";}
url=url+"&state="+$('#StateOrProvince').val()+"&town="+OfficialTown+"&ListingPriceMin="+$('#ListingPriceMin').val()+"&ListingPriceMax="+$('#ListingPriceMax').val();if(polyControl&&polyControl.getPolyPoints()){var vertices=polyControl.getPolyPoints();vertices.getAt(0).forEach(function(value,index){url=url+"&lat[]="+value.lat()+"&long[]="+value.lng();});}
if(markers.length){$(markers).each(function(){this.setMap(null);});markers=[];}
$('.PropertyType:checked').each(function(){url=url+'&PropertyType[]='+this.value;});$.ajax({type:"POST",url:APP_M_RPC,data:url,success:function(resp){if(resp){var data=jQuery.parseJSON(resp);var p_bounds=new google.maps.LatLngBounds();$.each(data,function(){if(this.results==1){var marker_image=new google.maps.MarkerImage(APP_M_IMG+'marker_property.png',new google.maps.Size(14,24),new google.maps.Point(0,0),new google.maps.Point(7,24));var marker=new google.maps.Marker({position:new google.maps.LatLng(this.lat,this.lng),icon:marker_image,clickable:true,map:map,title:this.PropertyType+' $'+this.ListPrice,results:this.results,s_method:this.method});var minfowindow=new google.maps.InfoWindow({content:getDetailBalloon(this.image,this.ListingID,this.ListPrice,this.PropertyType,this.StreetNumber,this.StreetName,this.City,this.StateOrProvince)});google.maps.event.addListener(marker,'click',function(){minfowindow.open(map,marker);m_pan=true;});}else{if(this.method=='all'){var marker_image=new google.maps.MarkerImage(APP_M_IMG+'marker_multi.png',new google.maps.Size(14,24),new google.maps.Point(0,0),new google.maps.Point(7,24));var marker=new MarkerWithLabel({position:new google.maps.LatLng(this.lat,this.lng),icon:marker_image,clickable:true,map:map,title:this.results+' listings at this address',results:this.results,s_method:this.method,labelContent:addCommas(this.results),labelAnchor:new google.maps.Point(12+(this.results.length/2),-2),labelClass:APP_M_KEY+'_map_pin_label'+(this.results.length<4?' '+APP_M_KEY+'_map_pin_label_sm':''),labelStyle:{opacity:0.75}});var minfowindow=new google.maps.InfoWindow({content:getMultiBalloon(this.results,this.lat,this.lng)});google.maps.event.addListener(marker,'click',function(){minfowindow.open(map,marker);m_pan=true;});}else{var marker_image=new google.maps.MarkerImage(APP_M_IMG+'marker_cluster.png',new google.maps.Size(14,24),new google.maps.Point(0,0),new google.maps.Point(7,24));var marker=new MarkerWithLabel({position:new google.maps.LatLng(this.lat,this.lng),icon:marker_image,clickable:true,map:map,title:(this.method!='state'?this.City+', '+this.StateOrProvince:this.StateOrProvince),results:this.results,s_method:this.method,labelContent:addCommas(this.results),labelAnchor:new google.maps.Point(12+(this.results.length/2),-2),labelClass:APP_M_KEY+'_map_pin_label'+(this.results.length<4?' '+APP_M_KEY+'_map_pin_label_sm':''),labelStyle:{opacity:0.75}});google.maps.event.addListener(marker,'click',function(){if(this.s_method=='state'){map.setZoom(map.getZoom()+4);}
else{if(map.getZoom()<=12){map.setZoom(map.getZoom()+3);}
else{map.setZoom(map.getZoom()+2);}}
map.panTo(this.getPosition());});}}
p_bounds.extend(marker.getPosition());markers.push(marker);});if(stateTownMode){map.fitBounds(p_bounds);stateTownMode=false;m_pan=true;}}
else if(stateTownMode){if(OfficialTown!=''&&$('#StateOrProvince').val()!=''){var address=OfficialTown+", "+$('#StateOrProvince').val();geocoder.geocode({'address':address},function(results,status){if(status==google.maps.GeocoderStatus.OK){map.fitBounds(results[0].geometry.viewport);}});}
stateTownMode=false;m_pan=true;}
else if(OfficialTown==''&&$('#StateOrProvince').val()!=''&&!markers.length){var address=$('#StateOrProvince').val();geocoder.geocode({'address':address},function(results,status){if(status==google.maps.GeocoderStatus.OK){map.fitBounds(results[0].geometry.viewport);}});}
saveSearchData();$('.'+APP_M_KEY+'_map_pane_loader').hide();},error:function(ajaxObj){if(ajaxObj.responseText.length){alert(ajaxObj.responseText);}
else{alert('Communication Error. Please try your request again later.');}
$('.'+APP_M_KEY+'_map_pane_loader').hide();}});}
function loadTowns(){$.ajax({type:"POST",url:APP_M_RPC,data:"action=get_towns&StateOrProvince="+$('#StateOrProvince').val(),success:function(resp){if(resp.length>0){$("#OfficialTown").html(resp);var OfficialTown=getCookie(APP_M_KEY+'_OfficialTown');if(OfficialTown){$('#OfficialTown').val(OfficialTown);}
$('#OfficialTown').removeAttr("disabled");}
else{$('#OfficialTown').attr("disabled",true);$("#OfficialTown").html('<option value="">-Please select state-</option>');}},error:function(ajaxObj){if(ajaxObj.responseText.length){alert(ajaxObj.responseText);}
else{alert('Communication Error. Please try your request again later.');}
$('#OfficialTown').attr("disabled",true);$("#OfficialTown").html('<option value="">-Please select state-</option>');}});}
function loadSavedSearchData(){var StateOrProvince=getCookie(APP_M_KEY+'_StateOrProvince');var ListingPriceMin=getCookie(APP_M_KEY+'_ListingPriceMin');var ListingPriceMax=getCookie(APP_M_KEY+'_ListingPriceMax');var PropertyType=getCookie(APP_M_KEY+'_PropertyType');var Lat=getCookie(APP_M_KEY+'_Lat');var Long=getCookie(APP_M_KEY+'_Long');var Zoom=getCookie(APP_M_KEY+'_Zoom');var Polyg=getCookie(APP_M_KEY+'_Polygon');if(StateOrProvince){$('#StateOrProvince').val(StateOrProvince);loadTowns();}
if(ListingPriceMin){$('#ListingPriceMin').val(ListingPriceMin);}
if(ListingPriceMax){$('#ListingPriceMax').val(ListingPriceMax);}
if(PropertyType){$.each(PropertyType.split('|'),function(i,v){if($('#'+v).length){$('#'+v).attr('checked',true);}});}
if(Polyg){polyState=Polyg;}
if(Lat&&Long&&Zoom){loadMap(parseFloat(Lat),parseFloat(Long),parseInt(Zoom));}
else{loadMap(APP_S_LAT,APP_S_LONG,APP_S_ZOOM);}}
function saveSearchData(){var cLatLong=map.getCenter();var OfficialTown=getCookie(APP_M_KEY+'_OfficialTown');OfficialTown=(!$('#OfficialTown').attr("disabled")?$('#OfficialTown').val():(OfficialTown?OfficialTown:''));setCookie(APP_M_KEY+'_StateOrProvince',$('#StateOrProvince').val(),APP_M_CEXP);setCookie(APP_M_KEY+'_OfficialTown',OfficialTown,APP_M_CEXP);setCookie(APP_M_KEY+'_ListingPriceMin',$('#ListingPriceMin').val(),APP_M_CEXP);setCookie(APP_M_KEY+'_ListingPriceMax',$('#ListingPriceMax').val(),APP_M_CEXP);setCookie(APP_M_KEY+'_Lat',cLatLong.lat(),APP_M_CEXP);setCookie(APP_M_KEY+'_Long',cLatLong.lng(),APP_M_CEXP);setCookie(APP_M_KEY+'_Zoom',map.getZoom(),APP_M_CEXP);var types='';var tcnt=0;$('.PropertyType:checked').each(function(){types=types+(tcnt>0?'|':'')+this.id;tcnt++;});setCookie(APP_M_KEY+'_PropertyType',types,APP_M_CEXP);if(polyControl){var pgs=polyControl.getPolyState();if(pgs){setCookie(APP_M_KEY+'_Polygon',pgs,APP_M_CEXP);}
else{setCookie(APP_M_KEY+'_Polygon','',APP_M_CEXP);}}
else{setCookie(APP_M_KEY+'_Polygon','',APP_M_CEXP);}}
function clearSavedSearchData(){setCookie(APP_M_KEY+'_StateOrProvince','',-1);setCookie(APP_M_KEY+'_OfficialTown','',-1);setCookie(APP_M_KEY+'_ListingPriceMin','',-1);setCookie(APP_M_KEY+'_ListingPriceMax','',-1);setCookie(APP_M_KEY+'_Lat','',-1);setCookie(APP_M_KEY+'_Long','',-1);setCookie(APP_M_KEY+'_Zoom','',-1);setCookie(APP_M_KEY+'_PropertyType','',-1);setCookie(APP_M_KEY+'_Polygon','',-1);}
function getMultiBalloon(cnt,mLat,mLng){var OfficialTown=getCookie(APP_M_KEY+'_OfficialTown');OfficialTown=(!$('#OfficialTown').attr("disabled")?$('#OfficialTown').val():(OfficialTown?OfficialTown:''));var url=APP_R_PAGE+'property_search_action=search&';url=url+'lat_ne='+mLat+'&lat_sw='+mLat+'&long_ne='+mLng+'&long_sw='+mLng;if($('#StateOrProvince').val()!=''&&OfficialTown!=''){url=url+"&town[]="+encodeURIComponent(OfficialTown+", "+$('#StateOrProvince option:selected').text());}
else if($('#StateOrProvince').val()!=''){url=url+"&state="+$('#StateOrProvince option:selected').text();}
if(polyControl&&polyControl.getPolyPoints()){var vertices=polyControl.getPolyPoints();vertices.getAt(0).forEach(function(value,index){url=url+"&lat[]="+value.lat()+"&long[]="+value.lng();});}
var ListingPriceMin=$('#ListingPriceMin').val();if(ListingPriceMin.length>0){url=url+'&ListingPriceMin='+escape(ListingPriceMin);}
var ListingPriceMax=$('#ListingPriceMax').val();if(ListingPriceMax.length>0){url=url+'&ListingPriceMax='+escape(ListingPriceMax);}
$('.PropertyType:checked').each(function(){url=url+'&PropertyType[]='+escape(this.value);});var balloon="<div style=\"width: auto; height: 75px; overflow:hidden;\">";balloon+="<div style=\"margin-top: 14px;\">There are "+addCommas(cnt)+" listings at this location.</div>";balloon+="<div style=\"margin-top: 10px;\"><a href=\""+url+"\">View these listings in List View...</a></div>";balloon+="</div>";balloon+="</div>";return balloon;}
function getDetailBalloon(img,mlsNum,price,pType,stNum,stName,stCity,stState){var balloon="<div style=\"width: 300px; overflow:hidden;\">";balloon+="<div style=\"float:left; height: 100px; width: 100px; overflow:hidden;\">";balloon+="<a href=\""+APP_L_PAGE+"id="+mlsNum+"&return=1\"><img src=\""+img+"\" height=\"100px;\" alt=\""+mlsNum+"\" border=\"0\" class=\""+APP_M_KEY+"_bubble_image\" /></a>";balloon+="</div>";balloon+="<div style=\"float:left; width: 190px; height: 100px; padding-left: 10px; overflow:hidden;\">";balloon+="<div class=\""+APP_M_KEY+"_bubble_mlsNumber\"><a href=\""+APP_L_PAGE+"id="+mlsNum+"&return=1\">MLS# "+mlsNum+"</a></div>";balloon+="<div class=\""+APP_M_KEY+"_bubble_type\">Type: "+pType+"</div>";balloon+="<div class=\""+APP_M_KEY+"_bubble_price\">$"+price+"</div>";balloon+="<div class=\""+APP_M_KEY+"_bubble_address\">"+stNum+" "+stName+"</div>";balloon+="<div class=\""+APP_M_KEY+"_bubble_cityState\">"+stCity+", "+stState+"</div>";balloon+="<div class=\""+APP_M_KEY+"_bubble_detailLink\"><a href=\""+APP_L_PAGE+"id="+mlsNum+"&return=1\">Click here for more details...</a></div>";balloon+="</div>";balloon+="</div>";return balloon;}
function addCommas(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;}
