﻿var Sawbuck = window.Sawbuck || {}; Sawbuck.Renderer = function () {
    var LOTTA_DOTS = 2500; var _maps = {}; var _no_map = false; var _view = "list"; var _map_center; var _view_change = false; var _timer; var _offset = 0; (function () { var d = {}; this.tmpl = function tmpl(a, b) { var c = !/\W/.test(a) ? d[a] = d[a] || tmpl(document.getElementById(a).innerHTML) : new Function("obj", "var p=[],print=function(){p.push.apply(p,arguments);};" + "with(obj){p.push('" + a.replace(/[\r\t\n]/g, " ").split("<#").join("\t").replace(/((^|#>)[^\t]*)'/g, "$1\r").replace(/\t=(.*?)#>/g, "',$1,'").split("\t").join("');").split("#>").join("p.push('").split("\r").join("\\'") + "');}return p.join('');"); return b ? c(b) : c } })(); function doNoListingsViewResize() { var pageBodyHeight = $j(window).height() - $j("#pageBody").offset().top - _offset; $j("#pageBody").css("height", pageBodyHeight); var listHeight = $j(".noListings").parents(".content").outerHeight() - $j(".noListings").parents(".content").offset().top; $j('.noListings').css("height", listHeight - 5); $j('.contentWrap').css("height", "auto"); }; function doListViewResize() {
        if ($j("body").width() >= 1574) { $j(".moreOptions, .lessOptions").hide(); $j(".criteriaPanel, .showMoreOptions").removeClass("expanded"); $j(".showMoreOptions").removeClass("visible"); }
        else { $j(".lessOptions, .moreOptions").attr("style", ""); $j(".showMoreOptions").addClass("visible"); }
        if (Sawbuck.UserManager.getPartnerID() != 0) {
            var pageBodyHeight = $j(window).height() - $j("#pageBody").offset().top - _offset; $j("#pageBody").css("height", pageBodyHeight); var listHeight = $j(".listView").parents(".content").outerHeight() - $j(".listView").parents(".content").offset().top + $j(".partnerContent").outerHeight() + $j(".criteriaPanel").outerHeight() - 67; if (listHeight < 466) { $j(".listView .leftPanel, .listView .rightPanel").css("height", "466px"); $j("html").css("overflow", "auto"); }
            else { $j(".listView .leftPanel, .listView .rightPanel").css("height", listHeight); $j("html").css("overflow", "hidden"); } 
        }
        else {
            var pageBodyHeight = $j(window).height() - $j("#pageBody").offset().top - _offset; $j("#pageBody").css("height", pageBodyHeight); var listHeight = $j(".listView").parents(".content").outerHeight() - $j(".listView").parents(".content").offset().top - $j(".criteriaPanel").outerHeight() + 87; if (listHeight <= 575) { $j(".listView .leftPanel, .listView .rightPanel").css("height", "575px"); $j("html").css("overflow", "auto"); }
            else { $j(".listView .leftPanel, .listView .rightPanel").css("height", listHeight); $j("html").css("overflow", "hidden"); } 
        }
        clearTimeout(_timer); _timer = setTimeout(Sawbuck.MapManager.loadTileData, 1000); setTimeout(function () { $j('.contentWrap').css("height", "auto"); }, 10);
    }; function doNewsFeedResize() {
        if ($j("body").width() >= 1224) { $j(".moreOptions, .lessOptions").hide(); $j(".criteriaPanel, .showMoreOptions").removeClass("expanded"); $j(".showMoreOptions").removeClass("visible"); }
        else { $j(".lessOptions, .moreOptions").attr("style", ""); $j(".showMoreOptions").addClass("visible"); }
        if (Sawbuck.UserManager.getPartnerID() != 0) {
            var pageBodyHeight = $j(window).height() - $j("#pageBody").offset().top - _offset; $j("#pageBody").css("height", pageBodyHeight); var listHeight = $j(".newsFeedView").parents(".content").outerHeight() - $j(".newsFeedView").parents(".content").offset().top + $j(".partnerContent").outerHeight() + $j(".criteriaPanel").outerHeight() - 67; if (listHeight < 466) { $j('.newsFeedView .leftPanel, .newsFeedView .rightPanel').css("height", "466px"); $j("html").css("overflow", "auto"); }
            else { $j('.newsFeedView .leftPanel, .newsFeedView .rightPanel').css("height", listHeight + 0); $j("html").css("overflow", "hidden"); } 
        }
        else {
            var pageBodyHeight = $j(window).height() - $j("#pageBody").offset().top - _offset; $j("#pageBody").css("height", pageBodyHeight); var listHeight = $j(".newsFeedView").parents(".content").outerHeight() - $j(".newsFeedView").parents(".content").offset().top + 87 - $j(".criteriaPanel").outerHeight(); if (listHeight < 575) { $j('.newsFeedView .leftPanel, .newsFeedView .rightPanel').css("height", "575px"); $j("html").css("overflow", "auto"); }
            else { $j('.newsFeedView .leftPanel, .newsFeedView .rightPanel').css("height", listHeight + 0); $j("html").css("overflow", "hidden"); } 
        }
        $j('.contentWrap').css("height", "auto");
    }; function doMapViewResize() {
        if (Sawbuck.UserManager.getPartnerID() != 0) {
            var pageBodyHeight = $j(window).height() - $j("#pageBody").offset().top - _offset; $j("#pageBody").css("height", pageBodyHeight); var mapHeight = $j(".mapView").parents(".content").outerHeight() - $j(".mapView").parents(".content").offset().top + $j(".partnerContent").outerHeight() + 15; if (mapHeight < 600)
                $j('.mapView').css("height", "600px"); else
                $j('.mapView').css("height", mapHeight);
        }
        else { var pageBodyHeight = $j(window).height() - $j("#pageBody").offset().top - _offset; $j("#pageBody").css("height", pageBodyHeight); var mapHeight = $j(".mapView").parents(".content").outerHeight() - $j(".mapView").parents(".content").offset().top; $j('.mapView').css("height", mapHeight + 25); $j('.contentWrap').css("height", "auto"); } 
    }; function doGalleryViewResize() { doListViewResize(); }; function displayPreview(listingID, view, listID) {
        view = view || _view; var selectedListing = Sawbuck.Page.getListingByID(listingID)
        if ((view == "map" || view == "multiMap") && selectedListing) {
            if (Sawbuck.UserManager.getPartnerID() != 0 && selectedListing.el > 0) { Sawbuck.Page.mapViewOpenListing(selectedListing.id); }
            return tmpl("mapViewTemplate", { selectedListing: selectedListing });
        }
        else if (view == "newsFeed" && selectedListing) {
            try {
                $j("#newsFeedContainer #" + listID + " .listingDetails").html(tmpl("newsFeedDetailedTemplate", { listing: selectedListing })); var needed_offset = $j("#newsFeedContainer #" + listID).offset().top - $j(".newsFeedView .listings:visible").offset().top + $j(".newsFeedView .listings:visible").scrollTop(); var current_offset = $j(".newsFeedView .listings:visible").scrollTop()
                var current_height = $j(".newsFeedView .listings:visible").height()
                var box_height = $j(".event.selected").height(); if ($j("#newsFeedContainer .listingDetails:visible").length) {
                    $j("#newsFeedContainer #" + listID).siblings().children(".listingDetails:visible").slideUp("fast", function () {
                        $j("#newsFeedContainer #" + listID + " .listingDetails").slideDown("fast", function () {
                            var needed_offset = $j("#newsFeedContainer #" + listID).offset().top - $j(".newsFeedView .listings:visible").offset().top + $j(".newsFeedView .listings:visible").scrollTop(); var current_offset = $j(".newsFeedView .listings:visible").scrollTop()
                            var current_height = $j(".newsFeedView .listings:visible").height()
                            var box_height = $j(".event.selected").height(); if (current_offset > needed_offset || (current_height + current_offset + box_height < needed_offset))
                                $j(".newsFeedView .listings:visible").animate({ scrollTop: needed_offset }, 'fast', 'linear'); else if (needed_offset > current_offset + current_height - box_height)
                                $j(".newsFeedView .listings:visible").animate({ scrollTop: needed_offset - current_height + box_height + 15 }, 'fast', 'linear');
                        });
                    });
                } else {
                    $j("#newsFeedContainer #" + listID + " .listingDetails").slideDown("fast", function () {
                        var needed_offset = $j("#newsFeedContainer #" + listID).offset().top - $j(".newsFeedView .listings:visible").offset().top + $j(".newsFeedView .listings:visible").scrollTop(); var current_offset = $j(".newsFeedView .listings:visible").scrollTop()
                        var current_height = $j(".newsFeedView .listings:visible").height()
                        var box_height = $j(".event.selected").height(); if (current_offset > needed_offset || (current_height + current_offset + box_height < needed_offset))
                            $j(".newsFeedView .listings:visible").animate({ scrollTop: needed_offset }, 'fast', 'linear'); else if (needed_offset > current_offset + current_height - box_height)
                            $j(".newsFeedView .listings:visible").animate({ scrollTop: needed_offset - current_height + box_height + 15 }, 'fast', 'linear');
                    });
                } 
            }
            catch (e) { console.log(e); }; return true;
        }
        return false;
    }; function renderMap(view, listings, center, polygonsOn, areaTypeID) {
        if (_no_map) return false; polygonsOn = polygonsOn || Sawbuck.Page.polygonsOn(); center = center || _map_center; switch (view) {
            case "list": case "gallery": var map = getMap("list", listings, center); Sawbuck.MapManager.initializePolygons(Sawbuck.Page.getPolygon()); if (listings)
                    Sawbuck.MapManager.initializeMarkers(listings.listing, false, false); Sawbuck.MapManager.resizeBy(); return map; break; case "newsFeed": var map = getMap("newsFeed", listings, center, false); if (listings) { Sawbuck.MapManager.initializeMarkers(listings.listing.collect(function (l) { return l.listing }), false, false, true, true, true); }
                break;
        } 
    }
    function renderNotLoggedInSales(view) { $j(".listView").show(); renderMap("list").fitPolygon(); Sawbuck.Page.hideLoader(); return; }; function renderNotLoggedInNewsFeeds() {
        var container = document.getElementById("newsFeedContainer"); if (Sawbuck.SearchManager.getValue("updateTypeID") == 4 || Sawbuck.SearchManager.getValue("updateTypeID") == 8)
            container.innerHTML = tmpl("notLoggedIn", {}); Sawbuck.Page.hideLoader();
    }; function renderMaximumReached(view) {
        switch (view) {
            case "gallery": document.getElementById("galleryViewContainer").innerHTML = (tmpl("maximumReachedGalleryView", {})); break; case "map": $j("#maximumResultsReached").html("The MLS only allows us to show the first " + Sawbuck.Page.getMaxDisplayable() + " results. Please refine your search.")
                $j("#maximumResultsReached").show(); break; case "list": default: document.getElementById("listViewContainer").innerHTML = (tmpl("maximumReachedListView", {})); Sawbuck.MapManager.clearMarkers(); break;
        }
        Sawbuck.Page.hideLoader();
    }
    function renderMarketActivity(listings) {
        document.getElementById("similarListings").innerHTML = tmpl("similarListingsTemplate", { listing: listings.Similar }); $j(".marketActivity .leftColumn").show(); if (Sawbuck.UserManager.isLoggedIn()) { document.getElementById("recentSales").innerHTML = tmpl("similarListingsTemplate", { listing: listings.RecentSales }); }
        $j(".marketActivity .rightColumn").show(); $j(".loader").hide();
    }
    function renderListView(listings, template) {
        template = template || "listViewTemplate"; var map; if (listings && listings.total) {
            $j(".listView .listings").scrollTop(0); document.getElementById("listViewContainer").innerHTML = ""; document.getElementById("listViewContainer").innerHTML = tmpl(template, listings); $j(".listView .listings").scrollTop(0); if (Sawbuck.UserManager.alertsOn() || true) { try { $j("#listViewContainer").append(tmpl("emailAlertsTemplate", [])) } catch (e) { }; $j(".listView .listing:last").css({ "border-bottom": "0px" }); }
            $j(".resultsPagination").show(); renderMap("list", listings);
        }
        else if (listings && listings.total === 0) { document.getElementById("listViewContainer").innerHTML = ""; document.getElementById("listViewContainer").innerHTML = tmpl("emptyListView", {}); $j(".resultsPagination").hide(); $j(".listView .listings").scrollTop(0); renderMap("list", listings); }
        else { renderMap("list", listings); Sawbuck.MapManager.fitPolygon(); }
        $j(".listView .listing:not(.empty)").hover(function () {
            if (!_no_map)
                try { showHighlightedMarker(this.id); } catch (e) { }; $j(this).addClass("highlighted");
        }, function () {
            if (!_no_map)
                try { hideHighlightedMarker(this.id); } catch (e) { }; $j(this).removeClass("highlighted");
        });
    }; function renderGalleryView(listings) { $j(".listingsContainer").addClass("galleryView"); renderListView(listings, "galleryViewTemplate"); }; function renderMapView(listings) {
        if (!Sawbuck.Page.maximumReached())
            $j("#maximumResultsReached").hide(); if (listings && listings.listing.length) {
            for (var i in listings.listing) { var l = listings.listing[i]; l.address = l.addr + "<br/>" + l.city + ", " + l.st + " " + l.zip; l.point = new GLatLng(parseFloat(l["lat"]), parseFloat(l["lng"])); }
            if (listings.listing.length >= 500) { renderMap("map", listings); }
            else { renderMap("map", listings); } 
        }
        else {
            if (Sawbuck.Page.polygonsOn())
                renderMap("map", listings).showNoListingsOverlay(); else
                renderMap("map", listings).showNoListingsOverlay();
        } 
    }; function renderNewsFeedView(listings) {
        if (listings && listings.listing.length) {
            var newsFeedContainer = document.getElementById("newsFeedContainer"); if (listings.first) {
                newsFeedContainer.innerHTML = ""; if (!Sawbuck.UserManager.isLoggedIn())
                    newsFeedContainer.innerHTML = tmpl("notLoggedIn", {});
            }
            else { $j("#moreEventsRow").remove(); }
            var displayedListings = {}; if (listings.more) { var nextTimestamp = listings.listing[listings.listing.length - 1].ts; displayedListings = { listing: listings.listing.slice(0, listings.listing.length - 1), first: listings.first }; newsFeedContainer.innerHTML += tmpl("newsFeedTemplate", displayedListings); newsFeedContainer.innerHTML += tmpl("moreEvents", { timestamp: nextTimestamp }); }
            else {
                displayedListings = listings
                newsFeedContainer.innerHTML += tmpl("newsFeedTemplate", listings);
            }
            Sawbuck.Renderer.renderMap("newsFeed", { listing: displayedListings.listing }); $j(".newsFeedView .event:not(.empty)").hover(function () {
                var point; try { if (point = Sawbuck.Page.getListingByID(this.id.match(/\d+_(.*)/)[1]).point) { Sawbuck.MapManager.highlightMarker(this.id.match(/\d+_(.*)/)[0]); }; }
                catch (e) { };
            }, function () { try { Sawbuck.MapManager.hideHighlightedMarker(this.id.match(/\d+_(.*)/)[0]); } catch (e) { }; });
        }
        else { document.getElementById("newsFeedContainer").innerHTML = tmpl("noNewsFeeds", {}); }
        $j(".listingsContainer .event:last").css({ "border-bottom": "0px" });
    }; function getMap(view, listings, center, tilesOn) {
        if (view == "gallery") view = "list"; if (!_maps[view]) {
            if (view == "list")
                Sawbuck.MapManager.init({ map_div: view + "ViewMap", criteria: Sawbuck.Page.getCriteria(), areaTypeID: Sawbuck.Page.getAreaTypeID(), areaID: Sawbuck.Page.getAreaID(), polygon: Sawbuck.Page.getPolygon(), center: center, zoom: Sawbuck.SearchManager.getValue("zoom")[0] }); else if (view == "newsFeed") { Sawbuck.MapManager.init({ map_div: view + "ViewMap", criteria: Sawbuck.Page.getCriteria(), tiles_on: tilesOn, areaTypeID: Sawbuck.Page.getAreaTypeID(), areaID: Sawbuck.Page.getAreaID(), polygon: Sawbuck.Page.getPolygon(), center: center, zoom: Sawbuck.SearchManager.getValue("zoom")[0] }); }
            else
                Sawbuck.MapManager.init({ map_div: view + "ViewMap", tiles_on: tilesOn, movement_tracking: false, criteria: Sawbuck.Page.getCriteria(), areaTypeID: Sawbuck.Page.getAreaTypeID(), areaID: Sawbuck.Page.getAreaID(), center: center, zoom: 18 }); _maps[view] = Sawbuck.MapManager.getMap(); _maps[view].alreadyPresent = false;
        }
        else
            _maps[view].alreadyPresent = true; _maps[view].checkResize(); return _maps[view];
    }
    function render() {
        if (this.getView() == "multiMapView") {
            this.getMap().resize(); if (!this.emptyListings())
                this.getMap().initializeMarkers(this.getAllCoordinates(this.getListings().slice(0, this.MAX_MARKERS))); this.getMap().initializePolygons(this._area_polygons);
        }
        return true;
    }
    function changeView(view) {
        $j(".listView").show(); $j(".viewSelection").attr("class", "viewSelection"); $j(".viewSelection").addClass(view); switch (view) {
            case "list": $j(".listingsContainer").removeClass("galleryView"); case "gallery": $j(window).resize(doListViewResize); break; case "newsFeed": $j(window).resize(doNewsFeedResize); break; case "map": $j(window).resize(doMapViewResize); if (Sawbuck.UserManager.getPartnerID() != 0 && document.getElementById('mapViewAd').src != Sawbuck.PartnerAds.skyscraper.url)
                    document.getElementById('mapViewAd').src = Sawbuck.PartnerAds.skyscraper.url; break;
        } 
    }
    function onLogin() {
        if (_view == "list") { $j("#ListingsPanel").show(); }
        $j("#tabs").removeClass("off"); $j("#inlineRegistration").hide();
    }
    function updateArea(res) {
        $j(".mapView .infoPanel").animate({ top: 0 }, 800); try { Sawbuck.Page.resetListingViews(); } catch (e) { }; $j("#maximumResultsReached").fadeOut(); var areaName = res.AreaName; Sawbuck.Page.setAreaID(res.GeographicAreaID); try { Sawbuck.Page.setAreaName(areaName); } catch (e) { }; document.title = res.PageTitle; $j("h1 span:first").html(res.BreadCrumbs); $j("h1 span:first a").addClass("hash"); if (Sawbuck.Page.getURL() == "/for_sale")
            $j("h1 span.selected").append(" <span class='type'>Homes for Sale</span>"); else if (Sawbuck.Page.getURL() == "/sold")
            $j("h1 span.selected").append(" <span class='type'>Recent Sales</span>"); else if (Sawbuck.Page.getURL() == "/news_feed")
            $j("h1 span.selected").append(" <span class='type'>News Feed</span>"); $j(".dropdown").css("overflow", "hidden"); if (res.Neighborhoods && res.Neighborhoods.length >= 1) {
            var neighborhoodsLabel = "Neighborhoods"; switch (res.Neighborhoods[0].AreaTypeID) { case 3: neighborhoodsLabel = "Counties"; break; case 4: neighborhoodsLabel = "Cities"; break; case 5: neighborhoodsLabel = "Zip Codes"; break; default: neighborhoodsLabel = "Neighborhoods"; }
            $j("#neighborhoodsMenu.dropdown a.menu").html(areaName + ' ' + neighborhoodsLabel + ' <img hspace="3" align="absmiddle" alt="" src="/images/down_arrow.png"/>'); var prefix = Sawbuck.Page.getURL(); $j("#neighborhoodsMenu.dropdown ul").html(""); for (var n = 0; n < res.Neighborhoods.length && n < 15; n++) { $j("#neighborhoodsMenu.dropdown ul").append($j("<li>").html("<a href=\"" + prefix + res.Neighborhoods[n].Url + "\" onclick=\"Sawbuck.Reporting.trackEvent('Area Relocation','Move between areas using drop-down menus'); Sawbuck.MapManager.switchArea(" + res.Neighborhoods[n].GeographicAreaID + "); return false;\" class=\"hash\">" + res.Neighborhoods[n].AreaName + "</a>")); }
            if (res.Neighborhoods.length > 15) { $j("#neighborhoodsMenu.dropdown ul").append($j("<li>").html("<a href=\"#\" onclick=\"Sawbuck.AreaHelper.showAllNeighborhoods(" + Sawbuck.Page.getAreaID() + "); return false;\" style=\"color: #f68d1e;\">More...</a>")); }
            $j("#neighborhoodsMenu.dropdown").show()
        }
        else
            $j("#neighborhoodsMenu.dropdown").hide(); if (res.NearbyAreas && res.NearbyAreas.length >= 1) {
            var nearbyLabel = "Places"; switch (res.AreaTypeID) { case 6: nearbyLabel = "Neighborhoods"; break; case 5: nearbyLabel = "Zip Codes"; break; case 4: nearbyLabel = "Cities"; break; case 3: nearbyLabel = "Counties"; break; }
            $j("#nearbyPlacesMenu.dropdown a.menu").html("Nearby " + nearbyLabel + ' <img hspace="3" align="absmiddle" alt="" src="/images/down_arrow.png"/>'); var prefix = Sawbuck.Page.getURL(); $j("#nearbyPlacesMenu.dropdown ul").html(""); for (var n = 0; n < res.NearbyAreas.length; n++) { $j("#nearbyPlacesMenu.dropdown ul").append($j("<li>").html("<a href=\"" + prefix + res.NearbyAreas[n].Url + "\" onclick=\"Sawbuck.Reporting.trackEvent('Area Relocation','Move between areas using drop-down menus'); Sawbuck.MapManager.switchArea(" + res.NearbyAreas[n].GeographicAreaID + "); return false;\" class=\"hash\">" + res.NearbyAreas[n].AreaName + "</a>")); }
            $j("#nearbyPlacesMenu.dropdown a.menu").show()
        }
        var newURL = res.Url; $j("#leftNav .overviewLink").attr("href", "/real_estate" + newURL); $j("#leftNav .homesForSaleLink").attr("href", "/for_sale" + newURL); $j("#leftNav .classifiedsLink").attr("href", "/classifieds" + newURL); $j("#leftNav .recentSalesLink").attr("href", "/sold" + newURL); $j("#leftNav .newsFeedLink").attr("href", "/news_feed" + newURL); $j("#leftNav .marketGuideLink").attr("href", "/market_guide" + newURL); $j("#leftNav .rssLink").attr("href", Sawbuck.Page.getURL() + newURL + "/rss"); var homesForSale = parseInt(res.ActiveCount).format(0, ","); var soldHomes = parseInt(res.SoldCount).format(0, ","); var classifiedHomes = parseInt(res.ClassifiedCount).format(0, ","); if (Sawbuck.Page.getURL() != "/classifieds")
            classifiedHomes == 1 ? $j("#leftNav .classifiedsLink span").text("1 Home for Sale") : $j("#leftNav .classifiedsLink span").text(classifiedHomes + " Homes for Sale"); classifiedHomes > 0 ? $j("#leftNav .classifiedsLink").parent().show() : ""; Sawbuck.SearchManager.setValue("areaURL", [res.Url]); Sawbuck.SearchManager.setValue("areaID", [res.GeographicAreaID]); Sawbuck.SearchManager.updateHash(); Sawbuck.ToggleMenu.resetMenus(); $j(".disclaimers").html(""); Sawbuck.Reporting.track(Sawbuck.Page.getURL() + res.Url); Sawbuck.Page.loadAreaInfoPanel();
    }; function showHighlightedMarker(id) {
        map = getMap(_view); try {
            var point; if (point = Sawbuck.Page.getListingByID(id).point) {
                if (_view == "gallery" || _view == "list") { var listing_marker = $j(".listingsContainer #" + id + " .letter img"); var marker_src = listing_marker.attr("src"); listing_marker.attr("src", marker_src.replace(/blue/, "orange")); }
                Sawbuck.MapManager.highlightMarker(id);
            };
        }
        catch (e) { } 
    }; function hideHighlightedMarker(id) {
        if (Sawbuck.MapManager.getMarker(id)) {
            if (_view == "gallery" || _view == "list") { var listing_marker = $j(".listingsContainer #" + id + " .letter img"); var marker_src = listing_marker.attr("src"); listing_marker.attr("src", marker_src.replace(/orange/, "blue")); }
            Sawbuck.MapManager.hideHighlightedMarker(id);
        } 
    }
    function showLottaDotsMessage() { if ((_view == "list" || _view == "gallery") && !$j(".mapIntro:visible").length && $j(".lottaDots").length) { $j(".lottaDots").show(); } }
    return { init: function (view, center, zoom) {
        _view = view; _map_center = center; if (_view == "list" || _view == "gallery") { doListViewResize(); renderMap("list"); $j(window).resize(doListViewResize); }
        else if (_view == "newsFeed") { doNewsFeedResize(); renderMap("newsFeed"); $j(window).resize(doNewsFeedResize); }
        if (_view != "newsFeed") { $j(".tabs a").removeClass("on"); $j(".tabs a." + view + "ViewTab").addClass("on"); } 
    }, render: function (view, listings, center, polygonsOn) {
        _view_change = (view != _view); _view = view; _map_center = center; if (view == "map" && !polygonsOn) { $j(".resultCount").text(""); }
        else if (listings && listings.total) {
            if (listings.total == 1) { if (Sawbuck.Page.onlyWithinArea()) $j(".resultCount").html("1 <label>Home Matches</label>"); else $j(".resultCount").html("1 <label>Home on Map</label>"); }
            else { if (Sawbuck.Page.onlyWithinArea()) $j(".resultCount").html(listings.total.format(0, ",") + " <label>Homes Match</label>"); else $j(".resultCount").html(listings.total.format(0, ",") + " <label>Homes on Map</label>"); }
            $j(".resultCount").fadeIn("slow"); if (listings.total >= LOTTA_DOTS) { showLottaDotsMessage(); } 
        }
        else { if (Sawbuck.Page.onlyWithinArea()) $j(".resultCount").html("0 <label>Homes Match</label>"); else $j(".resultCount").html("0 <label>Homes on Map</label>"); $j(".resultCount").fadeIn(); }
        if (!Sawbuck.UserManager.isLoggedIn()) { Sawbuck.UserManager.addListener("onRegister", onLogin); Sawbuck.UserManager.addListener("onLogin", onLogin); if (Sawbuck.Page.getURL() == "/sold") { return renderNotLoggedInSales(view); } }
        changeView(view); switch (view) {
            case "gallery": renderGalleryView(listings); break; case "map": renderMapView(listings); break; case "newsFeed": renderNewsFeedView(listings); break; case "list": default: renderListView(listings)
                break;
        }
        Sawbuck.Page.hideLoader();
    }, renderMap: renderMap, renderOnly: function (view, listings) {
        _no_map = true; switch (view) {
            case "gallery": renderGalleryView(listings); break; case "map": renderMapView(listings); break; case "newsFeed": renderNewsFeedView(listings); break; case "list": default: renderListView(listings)
                break;
        }
        Sawbuck.Page.hideLoader();
    }, renderMarketActivity: renderMarketActivity, renderNotLoggedInNewsFeeds: renderNotLoggedInNewsFeeds, renderMaximumReached: renderMaximumReached, displayPreview: function (id, view, listID) { view = view || _view; return displayPreview(id, view, listID); }, changeView: changeView, getMap: function (view) { view = view || _view; view = (view == "gallery" ? "list" : view); return _maps[view]; }, getStatus: function (input) {
        var output; switch (input) { case 1: output = "<span class='active'>For Sale</span>"; break; case 2: output = "<span class='contract'>Contract</span>"; break; case 4: output = "<span class='sold'>Sold</span>"; break; }
        return output;
    }, daysOnMarket: function (status, days, sDate, notBeforeDate, vague) {
        var output = ""; if (status < 4) {
            if (vague && status == 1) {
                if (days < 7)
                    output = "This Week"; else if (days < 14)
                    output = "1 Week"; else if (days <= 30)
                    output = parseInt(days / 7) + " Weeks"; else if (days < 60)
                    output = "1 Month"; else
                    output = parseInt(days / 30) + " Months";
            }
            else if (notBeforeDate) { days = (days <= Sawbuck.Utilities.daysAgo(notBeforeDate)) ? days : ">" + Sawbuck.Utilities.daysAgo(notBeforeDate); } else {
                if (days == 0)
                    output = "Today"; else
                    output = days + ((days == 1) ? " Day" : " Days");
            } 
        } else { output = (sDate.getMonth() + 1) + '/' + sDate.getDate() + '/' + (sDate.getFullYear() + '').substr(2, 2); }
        return output;
    }, getEventSentence: function (update, vague) {
        if (vague && update.utid == 2) { return (parseInt(update.nv) < parseInt(update.ov)) ? " was reduced to $" + parseInt(update.nv).format("0", ",") : " was increased to $" + parseInt(update.nv).format("0", ","); }
        switch (update.utid) { case 1: return (update.ov) ? " returned to market at " + ("$" + update["opr"].format("0", ",")) : " was listed for sale at " + ("$" + update["opr"].format("0", ",")); break; case 2: return (parseInt(update.nv) < parseInt(update.ov)) ? " was reduced from $" + parseInt(update.ov).format("0", ",") + " to $" + parseInt(update.nv).format("0", ",") : " was increased from $" + parseInt(update.ov).format("0", ",") + " to $" + parseInt(update.nv).format("0", ","); break; case 4: return " went under contract"; break; case 8: return " sold for " + (Sawbuck.Page.isSoldPriceApproximate() ? "*" : "") + update.cpr.toPrice(); break; case 16: return " listed an open house."; break; } 
    }, getEventIcon: function (type, nv, ov) { switch (type) { case 1: return (ov) ? "/images/icons/arrow_undo.png" : "/images/icons/new.png"; break; case 2: return (parseInt(nv) < parseInt(ov)) ? "/images/icons/money_delete.png" : "/images/icons/money_add.png"; break; case 4: return "/images/icons/page_white_stack.png"; break; case 8: return "/images/icons/money_dollar.png"; break; case 16: return "/images/icons/house.png"; break; } }, getEventMapIcon: function (type, nv, ov) { switch (type) { case 1: return (ov) ? "return_to_market" : "new"; break; case 2: return (parseInt(nv) < parseInt(ov)) ? "price_drop" : "price_increase"; break; case 4: return "contract"; break; case 8: return "sold"; break; case 16: default: return 99; break; } }, getEventType: function (type, nv, ov) { switch (type) { case 1: return (ov) ? "Return to Market" : "New Listing"; break; case 2: return (parseInt(nv) < parseInt(ov)) ? "Price Reduction" : "Price Increase"; break; case 4: return "Under Contract"; break; case 8: return "Sold"; break; case 16: return "Open House"; break; } }, getDateDifference: function (date, vague) {
        var diff = new Date().getTime() - date.getTime(); diff /= (1000 * 60); var today = new Date(); today.setFullYear(today.getFullYear(), today.getMonth(), today.getDate()); today.setHours(0, 0, 0, 0); var yesterday = today - (1000 * 60 * 60 * 24); if (vague && diff <= 10080)
            return "This Week"; if (diff <= 1) return "1 minute ago"; else if (diff < 60) return Math.floor(diff) + " minutes ago"; else diff /= 60; if (Math.floor(diff) == 1) return "1 hour ago"; else if (date < today && date > yesterday) return "Yesterday"; else if (diff < 24) return Math.floor(diff) + " hours ago"; else diff /= 24; if (diff < 6) return Math.ceil(diff) + " days ago"; if (Math.round(diff / 7) == 1) return "1 week ago"; else if (diff < 31) return Math.round(diff / 7) + " weeks ago"; else diff /= 30; if (diff < 12) return Math.ceil(diff) + " months ago"; else diff /= 12; return Math.ceil(diff) + " years ago";
    }, showMLSDisclaimer: function (mlsID) {
        if ($j(".disclaimers ." + mlsID).length <= 0) {
            var disclaimer; if (Sawbuck.UserManager.isLoggedIn())
                disclaimer = Sawbuck.MLS.getMLS(mlsID).DisclaimerVOW; else
                disclaimer = Sawbuck.MLS.getMLS(mlsID).DisclaimerIDX; $j(".disclaimers").append("<p class=\"" + mlsID + "\">" + disclaimer + "</p>");
        } 
    }, showHighlightedMarker: showHighlightedMarker, hideHighlightedMarker: hideHighlightedMarker, formatBaths: function (fullBaths, halfBaths) {
        if (!fullBaths && !halfBaths)
            return "--"; else if (fullBaths && halfBaths == 1) { return fullBaths + "½"; }
        else if (fullBaths && !halfBaths)
            return fullBaths; else return fullBaths + "." + halfBaths;
    }, templatize: tmpl, resize: function () {
        if (_view == "newsFeed")
            doNewsFeedResize(); else
            doListViewResize();
    }, updateArea: updateArea
    };
} ();