_mSvgEnabled=true;_mSvgForced=true;function TasmanLogoOverlay(){}
TasmanLogoOverlay.prototype=new GControl();Object.extend(TasmanLogoOverlay.prototype,{initialize:function(map){var container=document.createElement("div");var a=document.createElement("a");a.href="http://www.tasmanlabs.com/"
a.target="_blank";var img=document.createElement("img");img.src="/images/logo_vanguide108.png";img.alt="Search technology powered by Vanguide.";a.appendChild(img);container.appendChild(a);map.getContainer().appendChild(container);return container;},getDefaultPosition:function(){return new GControlPosition(G_ANCHOR_BOTTOM_RIGHT,new GSize(4,14));}})
var Map=Class.create();Object.extend(Map.prototype,{initialize:function(el,options){options=Object.extend({resizeFunction:Prototype.emptyFunction},options||{});this.resize=options.resizeFunction;this.resize();this.gmap=new GMap2($(el));this.gmap.addControl(new GSmallMapControl());this.gmap.addControl(new GMapTypeControl());this.gmap.addControl(new TasmanLogoOverlay());this.gmap.addControl(new DragZoomControl({opacity:.2,border:"2px solid red"},{buttonHTML:"<img src='/images/zoom-button.gif' title='Drag to Zoom' />",buttonZoomingHTML:"<img src='/images/zoom-button-activated.gif' title='Drag to Zoom' />",buttonStartingStyle:{width:'24px',height:'24px'}}));},setBounds:function(bounds){var min_lat=bounds[0];var min_lng=bounds[1];var max_lat=bounds[2];var max_lng=bounds[3];this.bounds=new GLatLngBounds(new GLatLng(min_lat,min_lng),new GLatLng(max_lat,max_lng));this.center=new GLatLng((min_lat+max_lat)/2.0,(min_lng+max_lng)/2.0);this.zoomLevel=this.gmap.getBoundsZoomLevel(this.bounds);if(this.zoomLevel>17)
this.zoomLevel=17;this.gmap.setCenter(this.center,this.zoomLevel);},listings:[],addMarkers:function(os,level){this.marker_manager.addMarkers(os.map(function(m){return m.marker}),level,level);os.each(function(o){GEvent.addListener(o.marker,"click",o.onClick.bindAsEventListener(o));this.listings.push(o);}.bind(this));},clearListings:function(){this.listings.each(function(listing){this.gmap.removeOverlay(listing.marker);}.bind(this));this.listings.clear();},buildListingsAndBounds:function(levels,bounds){this.clearListings();if(!bounds)return;this.setBounds(bounds);if(this.marker_manager)
this.marker_manager.clearMarkers();else
this.marker_manager=new MarkerManager(this.gmap);var map=this;this.addMarkers(levels[this.zoomLevel].listings.map(function(listing){return new Listing(listing,map)}),this.zoomLevel);this.addMarkers(levels[this.zoomLevel].clusters.map(function(cluster){return new Cluster(cluster)}),this.zoomLevel);this.marker_manager.refresh();levels.each(function(ls){this.addMarkers(ls.listings.map(function(listing){return new Listing(listing,map)}),ls.level);this.addMarkers(ls.clusters.map(function(cluster){return new Cluster(cluster)}),ls.level);}.bind(this));},zoomInOn:function(lat,lon){var zoom=this.gmap.getZoom();if(zoom==17)
return;this.gmap.closeInfoWindow();this.gmap.setCenter(new GLatLng(lat,lon),zoom+1);},resize:function(){var bodyD=$(document.body).getDimensions();var search_box=$("searchbox").getDimensions();var header=$("header").getDimensions();this.map_height=document.documentElement.clientHeight-(header.height+35);$("realmap").style.height=this.map_height+"px";$("realmap").style.width=(bodyD.width-(search_box.width+15))+"px";$("map_loading").style.height=this.map_height+"px";$("map_loading").style.width=(bodyD.width-(search_box.width+15))+"px";$("realmap_tabs").style.width=(bodyD.width-(search_box.width+13))+"px";$("realmap_tabs").getElementsByClassName('detail_tabs_clip')[0].style.width=(bodyD.width-(search_box.width+240))+"px";$("property_details").style.height=this.map_height+"px";$("property_details").style.width=(bodyD.width-(search_box.width+15))+"px";$("searchbox_results").style.height=(this.map_height-70)+"px";$("searchbox").style.height=(document.documentElement.clientHeight-(header.height+15))+"px";if(this.gmap){this.gmap.checkResize();}}});Event.observe(window,"load",function(){if($("realmap")){window.map=new Map("realmap",{resizeFunction:function(){var bodyD=$(document.body).getDimensions();var search_box=$("searchbox").getDimensions();var header=$("header").getDimensions();this.map_height=document.documentElement.clientHeight-(header.height+35);$("realmap").style.height=this.map_height+"px";$("realmap").style.width=(bodyD.width-(search_box.width+15))+"px";$("map_loading").style.height=this.map_height+"px";$("map_loading").style.width=(bodyD.width-(search_box.width+15))+"px";$("realmap_tabs").style.width=(bodyD.width-(search_box.width+13))+"px";$("realmap_tabs").getElementsByClassName('detail_tabs_clip')[0].style.width=(bodyD.width-(search_box.width+240))+"px";$("property_details").style.height=this.map_height+"px";$("property_details").style.width=(bodyD.width-(search_box.width+15))+"px";$("searchbox_results").style.height=(this.map_height-70)+"px";$("map_loading").style.height=(this.map_height+35)+"px";$("searchbox").style.height=(document.documentElement.clientHeight-(header.height+15))+"px";if(this.gmap){this.gmap.checkResize();}}});Event.observe(window,"unload",GUnload);Event.observe(window,"resize",window.map.resize)
CustomEvent.attach($("realmap"),"switchTo",window.map.resize.bind(window.map));CustomEvent.fire($('realmap'),"load");}});var Listing=Class.create();Listing.Icons={Standard:new GIcon(),Featured:new GIcon(),OpenHouse:new GIcon()};Object.extend(Listing.Icons.Standard,{image:"/images/house.png",shadow:"/images/house_shadow.png",iconSize:new GSize(40,32),shadowSize:new GSize(40,32),iconAnchor:new GPoint(7,24),infoWindowAnchor:new GPoint(22,3)});Object.extend(Listing.Icons.Featured,{image:"/images/house_featured.png",shadow:"/images/house_shadow.png",iconSize:new GSize(40,32),shadowSize:new GSize(40,32),iconAnchor:new GPoint(7,24),infoWindowAnchor:new GPoint(22,3)});Object.extend(Listing.Icons.OpenHouse,{image:"/images/house_openhouse.png",shadow:"/images/house_shadow.png",iconSize:new GSize(40,32),shadowSize:new GSize(40,32),iconAnchor:new GPoint(7,24),infoWindowAnchor:new GPoint(22,3)});Object.extend(Listing,{pixelOffset:new GSize(15,-20),openInfoWindow:function(map,x,y,id,address){var l=new GLatLng(y,x);map.gmap.openInfoWindowHtml(l,"<div style='text-align:center; width: 520px; height: 260px'>"+"<div class='loading_notice' style='padding-top: 140px'><img src='/images/progress.gif' alt='Loading...' /> Loading...</div></div>",{pixelOffset:Listing.pixelOffset});var url="/listings/"+id+"/popup"+(window.agent_id?"?agent_id="+window.agent_id:"");new Ajax.Request(url,{asynchronous:true,evalScripts:true,method:'get',onComplete:function(req){Listing.replaceInfoWindowText(map,req.responseText);}});urchinTracker("/listings/"+id+'/popup');Listing.loadBehind(id,address);},loadBehind:function(id,address){if(window.tabs)
window.tabs.addListing(id,address);},replaceInfoWindowText:function(map,text){var win=map.gmap.getInfoWindow();if(win&&win.getContentContainers()&&win.getContentContainers()[0]){$(win.getContentContainers()[0]).update(text);}else{setTimeout(this.replaceInfoWindowText.bind(this,map,text),50);}}});Object.extend(Listing.prototype,{initialize:function(listing_json,map){this.location=new GLatLng(listing_json.y,listing_json.x);var icon=listing_json.featured_property?Listing.Icons.Featured:(listing_json.open_house?Listing.Icons.OpenHouse:Listing.Icons.Standard);this.marker=new GMarker(this.location,icon);this.listing_id=listing_json.id;this.address=listing_json.address;this.map=map;},onClick:function(){Listing.openInfoWindow(this.map,this.location.x,this.location.y,this.listing_id,this.address)},type:"Listing"});var Cluster=Class.create();Cluster.icon=new GIcon();Object.extend(Cluster.icon,{image:"/images/house_cluster.png",shadow:"/images/house_cluster_shadow.png",iconSize:new GSize(40,32),shadowSize:new GSize(40,32),iconAnchor:new GPoint(7,24),infoWindowAnchor:new GPoint(22,3)});Object.extend(Cluster.prototype,{initialize:function(json){this.location=new GLatLng(json.y,json.x);this.marker=new GMarker(this.location,Cluster.icon);this.cluster_id=json.id;},onClick:function(){this.marker.openInfoWindowHtml("<div id='open_info_window' style='width: 520px; height: 260px'>"+"<div class='loading_notice' style='padding-top: 120px'><img src='/images/progress.gif' alt='Loading...' /> Loading...</div></div>");options={};if(window.search_id)
options["search_id"]=window.search_id;if(window.agent_id)
options["agent_id"]=window.agent_id;url="/clusters/"+this.cluster_id+"?"+Object.toQueryString(options);new Ajax.Updater("open_info_window",url,{asynchronous:true,evalScripts:true,method:'get'});urchinTracker('/clusters/'+this.cluster_id);},type:"Cluster"});var Tabs=Class.create();Object.extend(Tabs.prototype,{initialize:function(tabs_container,map_pane,details_container){this.tabs_container=$(tabs_container);this.map_tab=this.tabs_container.getElementsByClassName('map_tab')[0];this.map_link=this.map_tab.down();this.detail_tabs_container=this.tabs_container.getElementsByClassName('detail_tabs_container')[0];this.detail_tabs_scroller_left=this.tabs_container.getElementsByClassName('detail_tabs_scroller_left')[0];this.detail_tabs_scroller_right=this.tabs_container.getElementsByClassName('detail_tabs_scroller_right')[0];this.detail_tabs_closer=this.tabs_container.getElementsByClassName('detail_tabs_closer')[0];this.detail_tabs_clip=this.tabs_container.getElementsByClassName('detail_tabs_clip')[0];this.map_pane=$(map_pane);this.details_container=$(details_container);this.current_tab=this.map_tab;this.current_pane=this.map_pane;Event.observe(this.map_tab,"click",function(e){this.switchTo(this.map_tab);this.map_tab.blur();Event.stop(e);}.bindAsEventListener(this));Event.observe(this.detail_tabs_closer,"click",function(e){this.switchTo(this.map_tab);this.clearListings();Event.stop(e);}.bindAsEventListener(this));Event.observe(this.detail_tabs_scroller_left,"click",function(e){this.scrollLeft();this.detail_tabs_scroller_left.blur();Event.stop(e);}.bindAsEventListener(this));Event.observe(this.detail_tabs_scroller_right,"click",function(e){this.scrollRight();this.detail_tabs_scroller_right.blur();Event.stop(e);}.bindAsEventListener(this));this.checkDimScrollArrows();Event.observe(window,"resize",this.checkDimScrollArrows.bind(this));},listings:$A([]),addListing:function(listing_id,address){if(this.listings.indexOf(listing_id)>=0)
return;var tab_div=this.tabDiv(listing_id,address);this.detail_tabs_container.appendChild(tab_div);this.detail_tabs_closer.show();this.detail_tabs_scroller_left.show();this.detail_tabs_scroller_right.show();this.listings.push(listing_id);this.checkDimScrollArrows();},removeListing:function(listing_id){$("listing_tab_"+listing_id).remove();if(this.current_tab.id=="listing_tab_"+listing_id){var position=this.listings.indexOf(listing_id);this.listings=this.listings.without(listing_id);position=this.listings[position]?position:this.listings.length-1;if(this.listings.length==0){this.switchTo(this.map_tab);}else{this.switchTo(this.listings[position]);}}else{this.listings=this.listings.without(listing_id);}
if(this.listings.length==0){this.detail_tabs_closer.hide();this.detail_tabs_scroller_left.hide();this.detail_tabs_scroller_right.hide();}
this.checkDimScrollArrows();},clearListings:function(){this.listings.each(function(l){this.removeListing(l);}.bind(this));},switchTo:function(id){if(this.current_tab){this.current_tab.down().removeClassName("active");}
if(this.current_pane){this.current_pane.hide();}
if(isNaN(parseInt(id))){$(id).down().addClassName("active");this.current_tab=$(id);this.map_pane.show();this.current_pane=this.map_pane;}else{urchinTracker("/listings/"+id+"/map");$("listing_tab_"+id).down().addClassName("active");this.current_tab=$("listing_tab_"+id);this.details_container.show();this.current_pane=this.details_container;this.details_container.update("<div style='position: absolute; height: 50%; width: 100%; top: 50%' id='detail_view_loading' class='loading_notice'>"+"<img src='/images/progress.gif' alt='' /> Loading...</div>");new Ajax.Updater(this.details_container,"/listings/"+id,{asynchronous:true,evalScripts:true,method:'get'});}},tabDiv:function(listing_id,text){var div=$(document.createElement('DIV'));div.addClassName("tab");div.id="listing_tab_"+listing_id;div.onclick=function(){this.switchTo(listing_id);}.bind(this);var a=$(document.createElement('A'));a.addClassName("taba");a.innerHTML=text;a.href="#";a.onclick=function(){this.blur();return false;};div.appendChild(a);var xa=$(document.createElement('A'));xa.addClassName("tabx");xa.href="#";xa.onclick=function(){this.removeListing(listing_id);return false;}.bind(this);div.appendChild(xa);return div;},scrollPos:function(){return-parseInt(this.detail_tabs_container.style.left)||0;},tabWidth:function(){return $A(this.detail_tabs_container.getElementsByClassName("tab")).sum(function(tab){return tab.scrollWidth;});},scrollAvailWidth:function(){return parseInt(this.detail_tabs_clip.style.width);},scrollAmount:100,scrollLeft:function(){var current_pos=this.scrollPos();this.scrollBy(-Math.min(this.scrollAmount,current_pos));this.checkDimScrollArrows();},scrollRight:function(){var tab_width=this.tabWidth();var avail_width=this.scrollAvailWidth();var current_pos=this.scrollPos();var max_scroll=tab_width-avail_width;var available_scroll=max_scroll-current_pos;this.scrollBy(Math.min(this.scrollAmount,available_scroll));this.checkDimScrollArrows();},checkDimScrollArrows:function(){var tab_width=this.tabWidth();var avail_width=this.scrollAvailWidth();var current_pos=this.scrollPos();var max_scroll=tab_width-avail_width;if(tab_width>avail_width){if(current_pos>0){this.detail_tabs_scroller_left.removeClassName("disabled");}else{this.detail_tabs_scroller_left.addClassName("disabled");}
if(current_pos<max_scroll){this.detail_tabs_scroller_right.removeClassName("disabled");}else{this.detail_tabs_scroller_right.addClassName("disabled");}}else{this.detail_tabs_scroller_left.addClassName("disabled");this.detail_tabs_scroller_right.addClassName("disabled");}},scrollBy:function(amount){this.detail_tabs_container.style.left=-(this.scrollPos()+amount)+"px";}});var Carousel=Class.create();Carousel.prototype={initialize:function(carouselElemID){this.carouselElemID=carouselElemID;this.options=Object.extend({numVisible:4,scrollInc:3,animParameters:{},buttonStateHandler:null,animHandler:null,ajaxHandler:null,initDoneHandler:null,queue:"carousel",size:0,prevElementID:"prev-arrow",nextElementID:"next-arrow",ajaxParameters:null,url:null},arguments[1]||{});this.initDone=false;this.animRunning="none";this.requestIsRunning=false;this.animAfterFinish=this.options.animParameters.afterFinish;Object.extend(this.options.animParameters,{afterFinish:this._animDone.bind(this),queue:{position:'end',scope:this.options.queue}});this.prevScroll=this._prevScroll.bindAsEventListener(this);this.nextScroll=this._nextScroll.bindAsEventListener(this);this.onComplete=this._onComplete.bindAsEventListener(this);this.onFailure=this._onFailure.bindAsEventListener(this);Event.observe(this.options.prevElementID,"click",this.prevScroll);Event.observe(this.options.nextElementID,"click",this.nextScroll);var carouselListClass="carousel-list";this.carouselList=document.getElementsByClassName(carouselListClass,$(carouselElemID))[0]
this.options.size=$(this.carouselList.getElementsByTagName("li")).length;this._init();},destroy:function(){Event.stopObserving(this.options.prevElementID,"click",this.prevScroll);Event.stopObserving(this.options.nextElementID,"click",this.nextScroll);},scrollTo:function(newStart){var old_inc=this.options.scrollInc;this.ignoreNoMoreImages=true;if(newStart>this.currentIndex){this.options.scrollInc=newStart-this.currentIndex;this._nextScroll(this);}else{this.options.scrollInc=this.currentIndex-newStart;this._prevScroll(this);}
this.options.scrollInc=old_inc;},_init:function(){this.currentIndex=0;if(this.options.url)
this._request(this.currentIndex,this.options.numVisible);else{this._getLiElementSize();this._updateButtonStateHandler(this.options.prevElementID,false);this._updateButtonStateHandler(this.options.nextElementID,this.options.size>this.options.numVisible);}},_prevScroll:function(event){if(this.animRunning!="none"||this.currentIndex==0)
return;var inc=this.options.scrollInc;if(this.currentIndex-inc<0)
inc=this.currentIndex;this._scroll(inc)
return false;},_nextScroll:function(event){if(this.animRunning!="none")
return false;if(this.currentIndex+this.options.numVisible+this.options.scrollInc<=this.options.size)
this._scroll(-this.options.scrollInc);else{this.nbInCache=this.options.size-(this.currentIndex+this.options.numVisible);if(this.options.url&&this.noMoreImages==false)
this._request(this.currentIndex+this.options.numVisible+this.nbInCache,this.options.scrollInc-this.nbInCache);else{if(this.nbInCache>0)
this._scroll(-this.nbInCache);}}
return false;},_request:function(start,nb){if(this.options.url&&!this.requestIsRunning){this.requestIsRunning=true;if(this.options.ajaxHandler)
this.options.ajaxHandler(this,"before");var params="start="+start+"&nb="+nb;if(this.options.ajaxParameters!=null)
params+="&"+this.options.ajaxParameters
new Ajax.Request(this.options.url,{parameters:params,onComplete:this.onComplete,onFailure:this.onFailure});}},_onComplete:function(originalRequest){this.requestIsRunning=false;this.carouselList.innerHTML+=originalRequest.responseText;var size=this.options.size;this.options.size=this.carouselList.getElementsByTagName("li").length;var inc=this.options.size-size;if(this.initDone==false){this._getLiElementSize()
this.currentIndex=0;this.initDone=true;if(this.options.initDoneHandler)
this.options.initDoneHandler(this);this._updateButtonStateHandler(this.options.prevElementID,false);this._updateButtonStateHandler(this.options.nextElementID,this.options.size==this.options.numVisible);this.noMoreImages=this.options.size<this.options.numVisible}
else{if(!this.ignoreNoMoreImages)
this.noMoreImages=inc!=this.options.scrollInc;else
this.ignoreNoMoreImages=false;if(inc>0){this._scroll(-inc,this.noMoreImages)}
else{if(this.nbInCache>0)
this._scroll(-this.nbInCache,true);this._updateButtonStateHandler(this.options.nextElementID,false);}}
if(this.options.ajaxHandler)
this.options.ajaxHandler(this,"after");},_onFailure:function(originalRequest){this.requestIsRunning=false;},_animDone:function(event){if(this.options.animHandler)
this.options.animHandler(this.carouselElemID,"after",this.animRunning);this.animRunning="none";if(this.animAfterFinish)
this.animAfterFinish(event);},_updateButtonStateHandler:function(button,state){if(this.options.buttonStateHandler)
this.options.buttonStateHandler(button,state)},_scroll:function(delta,forceDisableNext){this.animRunning=delta>0?"prev":"next";if(this.options.animHandler)
this.options.animHandler(this.carouselElemID,"before",this.animRunning);new Effect.MoveBy(this.carouselList,0,delta*this.elementSize,this.options.animParameters);this.currentIndex-=delta;this._updateButtonStateHandler(this.options.prevElementID,this.currentIndex!=0);if(this.options.url&&this.noMoreImages==false)
enable=true;else
enable=(this.currentIndex+this.options.numVisible<this.options.size);this._updateButtonStateHandler(this.options.nextElementID,(forceDisableNext?false:enable));},_getLiElementSize:function(){var li=$(this.carouselList.getElementsByTagName("li")[0]);this.elementSize=li.getDimensions().width+parseFloat(li.getStyle("margin-left"))+parseFloat(li.getStyle("margin-right"));}}
function MarkerManager(map,opt_opts){var me=this;me.map_=map;me.mapZoom_=map.getZoom();me.projection_=map.getCurrentMapType().getProjection();opt_opts=opt_opts||{};me.tileSize_=MarkerManager.DEFAULT_TILE_SIZE_;var maxZoom=MarkerManager.DEFAULT_MAX_ZOOM_;if(opt_opts.maxZoom!=undefined){maxZoom=opt_opts.maxZoom;}
me.maxZoom_=maxZoom;me.trackMarkers_=opt_opts.trackMarkers;var padding;if(typeof opt_opts.borderPadding=="number"){padding=opt_opts.borderPadding;}else{padding=MarkerManager.DEFAULT_BORDER_PADDING_;}
me.swPadding_=new GSize(-padding,padding);me.nePadding_=new GSize(padding,-padding);me.borderPadding_=padding;me.gridWidth_=[];me.grid_=[];me.grid_[maxZoom]=[];me.numMarkers_=[];me.numMarkers_[maxZoom]=0;GEvent.bind(map,"moveend",me,me.onMapMoveEnd_);me.removeOverlay_=function(marker){map.removeOverlay(marker);me.shownMarkers_--;};me.addOverlay_=function(marker){map.addOverlay(marker);me.shownMarkers_++;};me.resetManager_();me.shownMarkers_=0;me.shownBounds_=me.getMapGridBounds_();};MarkerManager.DEFAULT_TILE_SIZE_=1024;MarkerManager.DEFAULT_MAX_ZOOM_=17;MarkerManager.DEFAULT_BORDER_PADDING_=100;MarkerManager.MERCATOR_ZOOM_LEVEL_ZERO_RANGE=256;MarkerManager.prototype.resetManager_=function(){var me=this;var mapWidth=MarkerManager.MERCATOR_ZOOM_LEVEL_ZERO_RANGE;for(var zoom=0;zoom<=me.maxZoom_;++zoom){me.grid_[zoom]=[];me.numMarkers_[zoom]=0;me.gridWidth_[zoom]=Math.ceil(mapWidth/me.tileSize_);mapWidth<<=1;}};MarkerManager.prototype.clearMarkers=function(){var me=this;me.processAll_(me.shownBounds_,me.removeOverlay_);me.resetManager_();};MarkerManager.prototype.getTilePoint_=function(latlng,zoom,padding){var pixelPoint=this.projection_.fromLatLngToPixel(latlng,zoom);return new GPoint(Math.floor((pixelPoint.x+padding.width)/this.tileSize_),Math.floor((pixelPoint.y+padding.height)/this.tileSize_));};MarkerManager.prototype.addMarkerBatch_=function(marker,minZoom,maxZoom){var mPoint=marker.getPoint();if(this.trackMarkers_){GEvent.bind(marker,"changed",this,this.onMarkerMoved_);}
var gridPoint=this.getTilePoint_(mPoint,maxZoom,GSize.ZERO);for(var zoom=maxZoom;zoom>=minZoom;zoom--){var cell=this.getGridCellCreate_(gridPoint.x,gridPoint.y,zoom);cell.push(marker);gridPoint.x=gridPoint.x>>1;gridPoint.y=gridPoint.y>>1;}};MarkerManager.prototype.isGridPointVisible_=function(point){var me=this;var vertical=me.shownBounds_.minY<=point.y&&point.y<=me.shownBounds_.maxY;var minX=me.shownBounds_.minX;var horizontal=minX<=point.x&&point.x<=me.shownBounds_.maxX;if(!horizontal&&minX<0){var width=me.gridWidth_[me.shownBounds_.z];horizontal=minX+width<=point.x&&point.x<=width-1;}
return vertical&&horizontal;}
MarkerManager.prototype.onMarkerMoved_=function(marker,oldPoint,newPoint){var me=this;var zoom=me.maxZoom_;var changed=false;var oldGrid=me.getTilePoint_(oldPoint,zoom,GSize.ZERO);var newGrid=me.getTilePoint_(newPoint,zoom,GSize.ZERO);while(zoom>=0&&(oldGrid.x!=newGrid.x||oldGrid.y!=newGrid.y)){var cell=me.getGridCellNoCreate_(oldGrid.x,oldGrid.y,zoom);if(cell){if(me.removeFromArray(cell,marker)){me.getGridCellCreate_(newGrid.x,newGrid.y,zoom).push(marker);}}
if(zoom==me.mapZoom_){if(me.isGridPointVisible_(oldGrid)){if(!me.isGridPointVisible_(newGrid)){me.removeOverlay_(marker);changed=true;}}else{if(me.isGridPointVisible_(newGrid)){me.addOverlay_(marker);changed=true;}}}
oldGrid.x=oldGrid.x>>1;oldGrid.y=oldGrid.y>>1;newGrid.x=newGrid.x>>1;newGrid.y=newGrid.y>>1;--zoom;}
if(changed){me.notifyListeners_();}};MarkerManager.prototype.removeMarker=function(marker){var me=this;var zoom=me.maxZoom_;var changed=false;var point=marker.getPoint();var grid=me.getTilePoint_(point,zoom,GSize.ZERO);while(zoom>=0){var cell=me.getGridCellNoCreate_(grid.x,grid.y,zoom);if(cell){me.removeFromArray(cell,marker);}
if(zoom==me.mapZoom_){if(me.isGridPointVisible_(grid)){me.removeOverlay_(marker);changed=true;}}
grid.x=grid.x>>1;grid.y=grid.y>>1;--zoom;}
if(changed){me.notifyListeners_();}};MarkerManager.prototype.addMarkers=function(markers,minZoom,opt_maxZoom){var maxZoom=this.getOptMaxZoom_(opt_maxZoom);for(var i=markers.length-1;i>=0;i--){this.addMarkerBatch_(markers[i],minZoom,maxZoom);}
this.numMarkers_[minZoom]+=markers.length;};MarkerManager.prototype.getOptMaxZoom_=function(opt_maxZoom){return opt_maxZoom!=undefined?opt_maxZoom:this.maxZoom_;}
MarkerManager.prototype.getMarkerCount=function(zoom){var total=0;for(var z=0;z<=zoom;z++){total+=this.numMarkers_[z];}
return total;};MarkerManager.prototype.addMarker=function(marker,minZoom,opt_maxZoom){var me=this;var maxZoom=this.getOptMaxZoom_(opt_maxZoom);me.addMarkerBatch_(marker,minZoom,maxZoom);var gridPoint=me.getTilePoint_(marker.getPoint(),me.mapZoom_,GSize.ZERO);if(me.isGridPointVisible_(gridPoint)&&minZoom<=me.shownBounds_.z&&me.shownBounds_.z<=maxZoom){me.addOverlay_(marker);me.notifyListeners_();}
this.numMarkers_[minZoom]++;};GBounds.prototype.containsPoint=function(point){var outer=this;return(outer.minX<=point.x&&outer.maxX>=point.x&&outer.minY<=point.y&&outer.maxY>=point.y);}
MarkerManager.prototype.getGridCellCreate_=function(x,y,z){var grid=this.grid_[z];if(x<0){x+=this.gridWidth_[z];}
var gridCol=grid[x];if(!gridCol){gridCol=grid[x]=[];return gridCol[y]=[];}
var gridCell=gridCol[y];if(!gridCell){return gridCol[y]=[];}
return gridCell;};MarkerManager.prototype.getGridCellNoCreate_=function(x,y,z){var grid=this.grid_[z];if(x<0){x+=this.gridWidth_[z];}
var gridCol=grid[x];return gridCol?gridCol[y]:undefined;};MarkerManager.prototype.getGridBounds_=function(bounds,zoom,swPadding,nePadding){zoom=Math.min(zoom,this.maxZoom_);var bl=bounds.getSouthWest();var tr=bounds.getNorthEast();var sw=this.getTilePoint_(bl,zoom,swPadding);var ne=this.getTilePoint_(tr,zoom,nePadding);var gw=this.gridWidth_[zoom];if(tr.lng()<bl.lng()||ne.x<sw.x){sw.x-=gw;}
if(ne.x-sw.x+1>=gw){sw.x=0;ne.x=gw-1;}
var gridBounds=new GBounds([sw,ne]);gridBounds.z=zoom;return gridBounds;};MarkerManager.prototype.getMapGridBounds_=function(){var me=this;return me.getGridBounds_(me.map_.getBounds(),me.mapZoom_,me.swPadding_,me.nePadding_);};MarkerManager.prototype.onMapMoveEnd_=function(){var me=this;me.objectSetTimeout_(this,this.updateMarkers_,0);};MarkerManager.prototype.objectSetTimeout_=function(object,command,milliseconds){return window.setTimeout(function(){command.call(object);},milliseconds);};MarkerManager.prototype.refresh=function(){var me=this;if(me.shownMarkers_>0){me.processAll_(me.shownBounds_,me.removeOverlay_);}
me.processAll_(me.shownBounds_,me.addOverlay_);me.notifyListeners_();};MarkerManager.prototype.updateMarkers_=function(){var me=this;me.mapZoom_=this.map_.getZoom();var newBounds=me.getMapGridBounds_();if(newBounds.equals(me.shownBounds_)&&newBounds.z==me.shownBounds_.z){return;}
if(newBounds.z!=me.shownBounds_.z){me.processAll_(me.shownBounds_,me.removeOverlay_);me.processAll_(newBounds,me.addOverlay_);}else{me.rectangleDiff_(me.shownBounds_,newBounds,me.removeCellMarkers_);me.rectangleDiff_(newBounds,me.shownBounds_,me.addCellMarkers_);}
me.shownBounds_=newBounds;me.notifyListeners_();};MarkerManager.prototype.notifyListeners_=function(){GEvent.trigger(this,"changed",this.shownBounds_,this.shownMarkers_);};MarkerManager.prototype.processAll_=function(bounds,callback){for(var x=bounds.minX;x<=bounds.maxX;x++){for(var y=bounds.minY;y<=bounds.maxY;y++){this.processCellMarkers_(x,y,bounds.z,callback);}}};MarkerManager.prototype.processCellMarkers_=function(x,y,z,callback){var cell=this.getGridCellNoCreate_(x,y,z);if(cell){for(var i=cell.length-1;i>=0;i--){callback(cell[i]);}}};MarkerManager.prototype.removeCellMarkers_=function(x,y,z){this.processCellMarkers_(x,y,z,this.removeOverlay_);};MarkerManager.prototype.addCellMarkers_=function(x,y,z){this.processCellMarkers_(x,y,z,this.addOverlay_);};MarkerManager.prototype.rectangleDiff_=function(bounds1,bounds2,callback){var me=this;me.rectangleDiffCoords(bounds1,bounds2,function(x,y){callback.apply(me,[x,y,bounds1.z]);});};MarkerManager.prototype.rectangleDiffCoords=function(bounds1,bounds2,callback){var minX1=bounds1.minX;var minY1=bounds1.minY;var maxX1=bounds1.maxX;var maxY1=bounds1.maxY;var minX2=bounds2.minX;var minY2=bounds2.minY;var maxX2=bounds2.maxX;var maxY2=bounds2.maxY;for(var x=minX1;x<=maxX1;x++){for(var y=minY1;y<=maxY1&&y<minY2;y++){callback(x,y);}
for(var y=Math.max(maxY2+1,minY1);y<=maxY1;y++){callback(x,y);}}
for(var y=Math.max(minY1,minY2);y<=Math.min(maxY1,maxY2);y++){for(var x=Math.min(maxX1+1,minX2)-1;x>=minX1;x--){callback(x,y);}
for(var x=Math.max(minX1,maxX2+1);x<=maxX1;x++){callback(x,y);}}};MarkerManager.prototype.removeFromArray=function(array,value,opt_notype){var shift=0;for(var i=0;i<array.length;++i){if(array[i]===value||(opt_notype&&array[i]==value)){array.splice(i--,1);shift++;}}
return shift;};function DragZoomControl(opts_boxStyle,opts_other,opts_callbacks){this.globals={draggingOn:false,cornerTopDiv:null,cornerRightDiv:null,cornerBottomDiv:null,cornerLeftDiv:null,mapPosition:null,outlineDiv:null,mapWidth:0,mapHeight:0,mapRatio:0,startX:0,startY:0,borderCorrection:0};this.globals.style={opacity:.2,fillColor:"#000",border:"2px solid blue"};var style=this.globals.style;for(var s in opts_boxStyle){style[s]=opts_boxStyle[s];}
var borderStyleArray=style.border.split(' ');style.outlineWidth=parseInt(borderStyleArray[0].replace(/\D/g,''));style.outlineColor=borderStyleArray[2];style.alphaIE='alpha(opacity='+(style.opacity*100)+')';this.globals.options={buttonHTML:'zoom ...',buttonStartingStyle:{width:'52px',border:'1px solid black',padding:'2px'},buttonStyle:{background:'#FFF'},buttonZoomingHTML:'Drag a region on the map',buttonZoomingStyle:{background:'#FF0'},overlayRemoveTime:6000,stickyZoomEnabled:false};for(var s in opts_other){this.globals.options[s]=opts_other[s]}
if(opts_callbacks==null){opts_callbacks={}}
this.globals.callbacks=opts_callbacks;}
DragZoomControl.prototype=new GControl();DragZoomControl.prototype.initButton_=function(mapDiv){var G=this.globals;var buttonDiv=document.createElement('div');buttonDiv.innerHTML=G.options.buttonHTML;buttonDiv.id='gzoom-control';DragZoomUtil.style([buttonDiv],{cursor:'pointer',zIndex:200});DragZoomUtil.style([buttonDiv],G.options.buttonStartingStyle);DragZoomUtil.style([buttonDiv],G.options.buttonStyle);mapDiv.appendChild(buttonDiv);return buttonDiv;};DragZoomControl.prototype.setButtonMode_=function(mode){var G=this.globals;if(mode=='zooming'){G.buttonDiv.innerHTML=G.options.buttonZoomingHTML;DragZoomUtil.style([G.buttonDiv],G.options.buttonZoomingStyle);}else{G.buttonDiv.innerHTML=G.options.buttonHTML;DragZoomUtil.style([G.buttonDiv],G.options.buttonStyle);}};DragZoomControl.prototype.initialize=function(map){var G=this.globals;var me=this;var mapDiv=map.getContainer();var buttonDiv=this.initButton_(mapDiv);var zoomDiv=document.createElement("div");zoomDiv.id='gzoom-map-cover';zoomDiv.innerHTML='<div id="gzoom-outline" style="position:absolute;display:none;"></div><div id="gzoom-cornerTopDiv" style="position:absolute;display:none;"></div><div id="gzoom-cornerLeftDiv" style="position:absolute;display:none;"></div><div id="gzoom-cornerRightDiv" style="position:absolute;display:none;"></div><div id="gzoom-cornerBottomDiv" style="position:absolute;display:none;"></div>';DragZoomUtil.style([zoomDiv],{position:'absolute',display:'none',overflow:'hidden',cursor:'crosshair',zIndex:101});mapDiv.appendChild(zoomDiv);GEvent.addDomListener(buttonDiv,'click',function(e){me.buttonclick_(e);});GEvent.addDomListener(zoomDiv,'mousedown',function(e){me.coverMousedown_(e);});GEvent.addDomListener(document,'mousemove',function(e){me.drag_(e);});GEvent.addDomListener(document,'mouseup',function(e){me.mouseup_(e);});G.mapPosition=DragZoomUtil.getElementPosition(mapDiv);G.outlineDiv=DragZoomUtil.gE("gzoom-outline");G.buttonDiv=DragZoomUtil.gE("gzoom-control");G.mapCover=DragZoomUtil.gE("gzoom-map-cover");G.cornerTopDiv=DragZoomUtil.gE("gzoom-cornerTopDiv");G.cornerRightDiv=DragZoomUtil.gE("gzoom-cornerRightDiv");G.cornerBottomDiv=DragZoomUtil.gE("gzoom-cornerBottomDiv");G.cornerLeftDiv=DragZoomUtil.gE("gzoom-cornerLeftDiv");G.map=map;G.borderCorrection=G.style.outlineWidth*2;this.setDimensions_();this.initStyles_();return buttonDiv;};DragZoomControl.prototype.getDefaultPosition=function(){return new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(3,120));};DragZoomControl.prototype.coverMousedown_=function(e){var G=this.globals;var pos=this.getRelPos_(e);G.startX=pos.left;G.startY=pos.top;DragZoomUtil.style([G.mapCover],{background:'transparent',opacity:1,filter:'alpha(opacity=100)'});DragZoomUtil.style([G.outlineDiv],{left:G.startX+'px',top:G.startY+'px',display:'block',width:'1px',height:'1px'});G.draggingOn=true;G.cornerTopDiv.style.top=(G.startY-G.mapHeight)+'px';G.cornerTopDiv.style.display='block';G.cornerLeftDiv.style.left=(G.startX-G.mapWidth)+'px';G.cornerLeftDiv.style.top=G.startY+'px';G.cornerLeftDiv.style.display='block';G.cornerRightDiv.style.left=G.startX+'px';G.cornerRightDiv.style.top=G.startY+'px';G.cornerRightDiv.style.display='block';G.cornerBottomDiv.style.left=G.startX+'px';G.cornerBottomDiv.style.top=G.startY+'px';G.cornerBottomDiv.style.width='0px';G.cornerBottomDiv.style.display='block';if(G.callbacks.dragstart!=null){G.callbacks.dragstart(G.startX,G.startY);}
return false;};DragZoomControl.prototype.drag_=function(e){var G=this.globals;if(G.draggingOn){var pos=this.getRelPos_(e);rect=this.getRectangle_(G.startX,G.startY,pos,G.mapRatio);if(rect.left){addX=-rect.width;}else{addX=0;}
if(rect.top){addY=-rect.height;}else{addY=0;}
DragZoomUtil.style([G.outlineDiv],{left:G.startX+addX+'px',top:G.startY+addY+'px',display:'block',width:'1px',height:'1px'});G.outlineDiv.style.width=rect.width+"px";G.outlineDiv.style.height=rect.height+"px";G.cornerTopDiv.style.height=((G.startY+addY)-(G.startY-G.mapHeight))+'px';G.cornerLeftDiv.style.top=(G.startY+addY)+'px';G.cornerLeftDiv.style.width=((G.startX+addX)-(G.startX-G.mapWidth))+'px';G.cornerRightDiv.style.top=G.cornerLeftDiv.style.top;G.cornerRightDiv.style.left=(G.startX+addX+rect.width+G.borderCorrection)+'px';G.cornerBottomDiv.style.top=(G.startY+addY+rect.height+G.borderCorrection)+'px';G.cornerBottomDiv.style.left=(G.startX-G.mapWidth+((G.startX+addX)-(G.startX-G.mapWidth)))+'px';G.cornerBottomDiv.style.width=(rect.width+G.borderCorrection)+'px';if(G.callbacks.dragging!=null){G.callbacks.dragging(G.startX,G.startY,rect.endX,rect.endY)}
return false;}};DragZoomControl.prototype.mouseup_=function(e){var G=this.globals;if(G.draggingOn){var pos=this.getRelPos_(e);G.draggingOn=false;var rect=this.getRectangle_(G.startX,G.startY,pos,G.mapRatio);if(rect.left)rect.endX=rect.startX-rect.width;if(rect.top)rect.endY=rect.startY-rect.height;this.resetDragZoom_();var nwpx=new GPoint(rect.startX,rect.startY);var nepx=new GPoint(rect.endX,rect.startY);var sepx=new GPoint(rect.endX,rect.endY);var swpx=new GPoint(rect.startX,rect.endY);var nw=G.map.fromContainerPixelToLatLng(nwpx);var ne=G.map.fromContainerPixelToLatLng(nepx);var se=G.map.fromContainerPixelToLatLng(sepx);var sw=G.map.fromContainerPixelToLatLng(swpx);var zoomAreaPoly=new GPolyline([nw,ne,se,sw,nw],G.style.outlineColor,G.style.outlineWidth+1,.4);try{G.map.addOverlay(zoomAreaPoly);setTimeout(function(){G.map.removeOverlay(zoomAreaPoly)},G.options.overlayRemoveTime);}catch(e){}
oBounds=new GLatLngBounds();oBounds.extend(nw);oBounds.extend(ne);oBounds.extend(se);oBounds.extend(sw);zoomLevel=G.map.getBoundsZoomLevel(oBounds);center=oBounds.getCenter();G.map.setCenter(center,zoomLevel);if(G.callbacks.dragend!=null){G.callbacks.dragend(nw,ne,se,sw,nwpx,nepx,sepx,swpx);}
if(G.options.stickyZoomEnabled){this.initCover_();}}};DragZoomControl.prototype.setDimensions_=function(){var G=this.globals;var mapSize=G.map.getSize();G.mapWidth=mapSize.width;G.mapHeight=mapSize.height;G.mapRatio=G.mapHeight/G.mapWidth;DragZoomUtil.style([G.mapCover,G.cornerTopDiv,G.cornerRightDiv,G.cornerBottomDiv,G.cornerLeftDiv],{width:G.mapWidth+'px',height:G.mapHeight+'px'});};DragZoomControl.prototype.initStyles_=function(){var G=this.globals;DragZoomUtil.style([G.mapCover,G.cornerTopDiv,G.cornerRightDiv,G.cornerBottomDiv,G.cornerLeftDiv],{filter:G.style.alphaIE,opacity:G.style.opacity,background:G.style.fillColor});G.outlineDiv.style.border=G.style.border;};DragZoomControl.prototype.buttonclick_=function(){if(this.globals.mapCover.style.display=='block'){this.resetDragZoom_();}else{this.initCover_();}};DragZoomControl.prototype.initCover_=function(){var G=this.globals;G.mapPosition=DragZoomUtil.getElementPosition(G.map.getContainer());this.setDimensions_();this.setButtonMode_('zooming');DragZoomUtil.style([G.mapCover],{display:'block',background:G.style.fillColor});DragZoomUtil.style([G.outlineDiv],{width:'0px',height:'0px'});if(G.callbacks['buttonclick']!=null){G.callbacks.buttonclick();}};DragZoomControl.prototype.getRelPos_=function(e){var pos=DragZoomUtil.getMousePosition(e);var G=this.globals;return{top:(pos.top-G.mapPosition.top),left:(pos.left-G.mapPosition.left)};};DragZoomControl.prototype.getRectangle_=function(startX,startY,pos,ratio){var left=false;var top=false;var dX=pos.left-startX;var dY=pos.top-startY;if(dX<0){dX=dX*-1;left=true;}
if(dY<0){dY=dY*-1;top=true;}
delta=dX>dY?dX:dY;return{startX:startX,startY:startY,endX:startX+delta,endY:startY+parseInt(delta*ratio),width:delta,height:parseInt(delta*ratio),left:left,top:top}};DragZoomControl.prototype.resetDragZoom_=function(){var G=this.globals;DragZoomUtil.style([G.mapCover,G.cornerTopDiv,G.cornerRightDiv,G.cornerBottomDiv,G.cornerLeftDiv],{display:'none',opacity:G.style.opacity,filter:G.style.alphaIE});G.outlineDiv.style.display='none';this.setButtonMode_('normal');};var DragZoomUtil={};DragZoomUtil.gE=function(sId){return document.getElementById(sId);}
DragZoomUtil.getMousePosition=function(e){var posX=0;var posY=0;if(!e)var e=window.event;if(e.pageX||e.pageY){posX=e.pageX;posY=e.pageY;}else if(e.clientX||e.clientY){posX=e.clientX+
(document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft);posY=e.clientY+
(document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop);}
return{left:posX,top:posY};};DragZoomUtil.getElementPosition=function(element){var leftPos=element.offsetLeft;var topPos=element.offsetTop;var parElement=element.offsetParent;while(parElement!=null){leftPos+=parElement.offsetLeft;topPos+=parElement.offsetTop;parElement=parElement.offsetParent;}
return{left:leftPos,top:topPos};};DragZoomUtil.style=function(elements,styles){if(typeof(elements)=='string'){elements=DragZoomUtil.getManyElements(elements);}
for(var i=0;i<elements.length;i++){for(var s in styles){elements[i].style[s]=styles[s];}}};DragZoomUtil.getManyElements=function(idsString){var idsArray=idsString.split(',');var elements=[];for(var i=0;i<idsArray.length;i++){elements[elements.length]=DragZoomUtil.gE(idsArray[i])};return elements;};var DirectionsMap=Class.create();Object.extend(DirectionsMap.prototype,{map:null,initialize:function(map_dom_id,directions_dom_id,address,lng,lat){this.map_dom=$(map_dom_id);this.directions_dom_id=$(directions_dom_id);this.map=new GMap2(this.map_dom);this.map_dom.directions_map=this;this.destination=address;this.location=new GLatLng(lat,lng);CustomEvent.attach($("property_details"),"switchTo",this.refresh.bind(this));this.refresh();this.map.addOverlay(new GMarker(this.location,Listing.icon));},refresh:function(){this.map.checkResize();this.map.setCenter(this.location,14);},getDirectionsFrom:function(begin){var directions=new GDirections(this.map,this.directions_dom_id);GEvent.addListener(directions,"addoverlay",function(){this.directions_dom_id.show();}.bind(this));directions.load(begin+" to "+this.destination);}});var Flash={ListingDetail:Class.create()};Object.extend(Flash.ListingDetail.prototype,{div_selector:"#property_details .listing_detail",delay:3000,template:new Template("<div id='flash_detail_notice' style='display: none'>#{text}</div>"),initialize:function(text){var parent=$$(this.div_selector)[0];new Insertion.Top(parent,this.template.evaluate({text:text}));new Effect.BlindDown('flash_detail_notice');setTimeout(this.remove.bind(this),this.delay);},remove:function(){new Effect.BlindUp('flash_detail_notice',{oncomplete:function(){$('flash_detail_notice').remove();}});}});var MiniPhoto=Class.create();Object.extend(MiniPhoto.prototype,{initialize:function(numimages,base){this.num_images=numimages;this.photo_base=new Template(base);this.current_photo=1;Event.observe('mini_photo_prev','click',this.prev.bind(this));Event.observe('mini_photo_next','click',this.next.bind(this));this.check_next_prev();},preload_photo:function(i){if(i>=this.num_images-1)
return;var img=new Image();img.src=this.photo_base.evaluate({num:i<10?"0"+i:i});},next:function(){this.current_photo++;this.update_photo_and_number();UI.fork(this.preload_photo.bind(this,this.current_photo+1));},prev:function(){this.current_photo--;this.update_photo_and_number();},update_photo_and_number:function(){var i=this.current_photo-1;$('mini_photo_photo').src=this.photo_base.evaluate({num:i<10?"0"+i:i});$('mini_photo_current_num').update(this.current_photo);this.check_next_prev();},check_next_prev:function(){if(this.current_photo>=this.num_images||this.num_images<=1){$('mini_photo_next').disabled=true;$('mini_photo_next').addClassName('disabled');}else{$('mini_photo_next').disabled=false;$('mini_photo_next').removeClassName('disabled');}
if(this.current_photo<=1||this.num_images<=1){$('mini_photo_prev').disabled=true;$('mini_photo_prev').addClassName('disabled');}else{$('mini_photo_prev').disabled=false;$('mini_photo_prev').removeClassName('disabled');}}});