﻿var map;
var markers = [];
var markers_r = [];
var lastHighlightedMarkerNum = -1;
var highlightedRows = [];
var gridRows = [];
var nwLat = 0;
var nwLong = 0;
var seLat = 360;
var seLong = -360;
var gridHeightFudgeFactorChicago = 10;
var gridHeightFudgeFactorVirginia = 10;
var gridHeightFudgeFactor = 5;
var gridHeightFudgeFactorIndianapolis = 55;
var markerInfo;
var gMapData;
var divisionID = "210000000000";
//Default Sort Settings
var communitySortColumn = "Name";
var communitySortOrder = "ASC";
var inventorySortColumn = "PlanName";
var inventorySortOrder = "ASC";
var modelSortColumn = "PlanName";
var modelSortOrder = "ASC";
var sortIconASC = "/images/divisionlanding/SortArrowUp.png";
var sortIconDESC = "/images/divisionlanding/SortArrowDown.png";

if (GBrowserIsCompatible()) {

    //Reset all the variables before making a request to the web service
    //Called by: SetMapType, all 3 Sort Methods
    function resetVariables() {
        //Used for memory management in Google Maps
        GUnload();
        markers.length = 0;
        markers_r.length = 0;
        lastHighlightedMarkerNum = -1;
        highlightedRows.length = 0;
        gridRows.length = 0;
        gridHeightFudgeFactor = 5;
        nwLat = 0;
        nwLong = 0;
        seLat = 360;
        seLong = -360;
        markerInfo = null;
        gMapData = null;
        var hiddenDivisionID = document.getElementById("hiddenDivisionID");
        if (hiddenDivisionID) {
            divisionID = hiddenDivisionID.innerHTML;
            //Chicago wants to SquareFeet DESC to be default sort order on Models
            if (divisionID == 235000000000) {
                modelSortColumn = "SquareFeet";
                modelSortOrder = "DESC";
                gridHeightFudgeFactor = gridHeightFudgeFactorChicago;

            }
            else if (divisionID == 230000000000) {
                gridHeightFudgeFactor = gridHeightFudgeFactorIndianapolis;
            }
            else if (divisionID == 297000000000) {
                gridHeightFudgeFactor = gridHeightFudgeFactorVirginia;
            }
        }
    }

    function initializeMap() {
        //Insert AJAX Indicator into Div where the Grid will eventually be
        document.getElementById("GMapGrid").innerHTML = "<div style='width:100%; margin-top:40px; margin-bottom:40px; text-align:center;'><img src='/images/DivisionLanding/AjaxSpinner.gif' style='text-align:center;' /></div>";
        //Setup the Google Map Icons
        setupMarkerIcons();
        //Initialize Google Map
        map = new GMap2(document.getElementById("map"));
        map.addControl(new TypeControl());
        map.addControl(new ZoomControl());
        map.enableDoubleClickZoom();
    }

    //// COMMUNITY FUNCTIONS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    function GetCommunityMapData() {
        GMapDataService.GetCommunityMarkers(divisionID, communitySortColumn, communitySortOrder, constructCommunityMapAndGrid);
        initializeMap();
    }

    //Construct the Community Grid Header
    //Return as string containing the HTML
    function createCommunityGridHeader() {
        var row = [];
        row.push("<tr><th class=\"Zoom\">Zoom</th>");
        row.push("<th class=\"CommunityName\">");
        row.push("<a href=\"javascript:sortCommunityBy('Name', '");
        if ((communitySortColumn != "Name") || (communitySortOrder == "DESC"))
            row.push("ASC");
        else
            row.push("DESC");
        row.push("');\">Community Name</a>");
        if (communitySortColumn == "Name") {
            if (communitySortOrder == "ASC")
                row.push("<img src=" + sortIconASC + " />");
            else
                row.push("<img src=" + sortIconDESC + " />");
        }
        row.push("</th><th class=\"SchoolDistrict\"><a href=\"javascript:sortCommunityBy('SchoolDistrict', '");
        if ((communitySortColumn != "SchoolDistrict") || (communitySortOrder == "DESC"))
            row.push("ASC");
        else
            row.push("DESC");
        row.push("');\">School District</a>");
        if (communitySortColumn == "SchoolDistrict") {
            if (communitySortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        row.push("</th><th class=\"PricesFrom\"><a href=\"javascript:sortCommunityBy('PricesFrom', '");
        if ((communitySortColumn != "PricesFrom") || (communitySortOrder == "DESC")) {
            row.push("ASC");
        }
        else {
            row.push("DESC");
        }
        row.push("');\">Prices From</a>");
        if (communitySortColumn == "PricesFrom") {
            if (communitySortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        row.push("</th><th class=\"HouseType\">Info</th><th class=\"County\"><a href=\"javascript:sortCommunityBy(");
        if (useCityInsteadOfCounty()) {
            row.push("'City', '");
        }
        else {
            row.push("'County', '");
        }
        if (useCityInsteadOfCounty()) {
            if ((communitySortColumn != "City") || (communitySortOrder == "DESC")) {
                row.push("ASC");
            }
            else {
                row.push("DESC");
            }
        }
        else {
            if ((communitySortColumn != "County") || (communitySortOrder == "DESC")) {
                row.push("ASC");
            }
            else {
                row.push("DESC");
            }
        }
        if (useCityInsteadOfCounty()) {
            row.push("');\">City</a>");
        }
        else {
            row.push("');\">County</a>");
        }
        if (communitySortColumn == "County") {
            if (communitySortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        else if (communitySortColumn == "City") {
            if (communitySortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        row.push("</th></tr>");
        return row.join('');
    }

    function constructCommunityMapAndGrid(data) {
        gMapData = data;
        createCommunityGrid();
        createCommunityMap();
    }

    //Construct the Community Grid and insert into proper DIV
    function createCommunityGrid() {
        var height = (25 * gMapData.Communities.length) + gridHeightFudgeFactor;
        //if (height > 303)
        //    height = 303;
        if (height < 36)
            height = 36;
        gridRows.push('<table>');
        gridRows.push(createCommunityGridHeader());
        gridRows.push('</table>');
        gridRows.push('<div ');
        //if (height < 303)
        //gridRows.push('\'ScrollableTable\'');
        //else
        //    gridRows.push('\'ScrollableTable2\'');
        gridRows.push('id=\'gridTable\' style=\'height:' + height + 'px;\'><table>');
        for (var i = 0; i < gMapData.Communities.length; i++) {
            createCommunityRow(i);
        }
        gridRows.push('</table>');
        document.getElementById("GMapGrid").innerHTML = gridRows.join('');
    }

    //Add the markers to the Map
    function createCommunityMap() {
        for (var i = 0; i < gMapData.Markers.length; i++) {
            createCommunityMarker(i);
            updateMapCorners(gMapData.Markers[i].Latitude, gMapData.Markers[i].Longitude);
        }
        createDesignCenterMarker();
        setMapCenterZoom();
        for (var i = 0; i < markers.length; i++) {
            map.addOverlay(markers[i]);
            map.addOverlay(markers_r[i]);
            markers_r[i].hide();
        }
    }
    //Create a Community Marker and add to the markers array
    function createCommunityMarker(markerNum) {
        var theMarker = gMapData.Markers[markerNum];
        var icon = mi_icon_n;
        var icon_r = mi_icon_r;
        
        if (gMapData.Markers[markerNum].HasSalesOffice == true) {
            icon = sales_icon_n;
            icon_r = mi_icon_r;
        }
        var marker = new GMarker(new GLatLng(gMapData.Markers[markerNum].Latitude, gMapData.Markers[markerNum].Longitude), icon);
        var marker_r = new GMarker(new GLatLng(gMapData.Markers[markerNum].Latitude, gMapData.Markers[markerNum].Longitude), { icon: icon_r, zIndexProcess: orderOfCreation, title: "Click for more info" });
        GEvent.addListener(marker_r, "click", function() {
            if (gMapData.Markers[markerNum].LinkedRows.length == 1) {
                marker_r.openInfoWindowTabsHtml([createCommunityBasicInfoTab(gMapData.Communities[gMapData.Markers[markerNum].LinkedRows[0]]), createDrivingDirectionsTab(gMapData.Communities[gMapData.Markers[markerNum].LinkedRows[0]].DrivingDirections)]);
            }
            else if (gMapData.Markers[markerNum].LinkedRows.length > 1) {
                marker_r.openInfoWindowHtml(createCommunityListPopup(markerNum));
            }
        });
        GEvent.addListener(marker, "mouseover", function() {
            highlightMarker(markerNum);
            unHighlightRows();
            for (var i = 0; i < gMapData.Markers[markerNum].LinkedRows.length; i++) {
                var id = "CR" + gMapData.Communities[gMapData.Markers[markerNum].LinkedRows[i]].CommunityID;
                highlightedRows.push(id);
            }
            scrollToRows();
            highlightRows();
        });
        markers.push(marker);
        markers_r.push(marker_r);
    }

    //Create a row for the Community Grid with the proper information
    function createCommunityRow(commNum) {
        var ci = gMapData.Communities[commNum];
        var row = [];
        var commURL = "/FindYourHome/CommunityDetails.aspx?Community=" + ci.CommunityID;
        var id = "CR" + ci.CommunityID;
        row.push("<tr id='" + id + "' onmouseover=\"highlightRow('" + id + "');highlightMarker(" + ci.MarkerRef + ");\">");
        row.push("<td class=\"Zoom\" style=\"text-align:center;\"><a href=\"javascript:zoomToCommunity(" + ci.MarkerRef + ", " + commNum + ");\"><img src='/images/GoogleMapsIcons/MagnifyingGlass.gif' /></a></td><td class=\"CommunityName\" >");
        row.push("<a href='" + commURL + "'>" + ci.Name + "</a>");
        row.push("</td><td class=\"SchoolDistrict\">");
        row.push(ci.SchoolDistrict);
        row.push("</td><td class=\"PricesFrom\">");
        if (ci.PricesFrom)
            row.push(formatCurrency(ci.PricesFrom));
        else
            row.push("Coming Soon");
        row.push("</td><td class=\"HouseType\">");
        for (var i = 0; i < ci.HouseTypes.length; i++) {
            if (ci.HouseTypes[i] == "Single Family") {
                row.push("<img src=\"/images/DivisionLanding/hometype_marker_SF.gif\"  title=\"Single Family\" style=\"width:20px; height:16px;\" />");
            }
            else if (ci.HouseTypes[i] == "Townhomes") {
                row.push("<img src=\"/images/DivisionLanding/hometype_marker_TH.gif\" title=\"Town Home\" style=\"width:20px; height:16px;\" />");
            }
            else if (ci.HouseTypes[i] == "Condos") {
                row.push("<img src=\"/images/DivisionLanding/hometype_marker_C.gif\" title=\"Condo\" style=\"width:20px; height:16px;\" />");
            }
        }
        if (ci.HasSalesOffice == true) {
            row.push("<img src=\"/images/GoogleMapsIcons/model_icon.png\" title=\"Sales Center\" style=\"width:20px; height:16px;\" />");
        }
        if (ci.HasModelHome == true) {
            row.push("<img src=\"/images/GoogleMapsIcons/modelnonsalesoffice_icon.png\" title=\"Model Home\" style=\"width:20px; height:16px;\" />");
        }
        row.push("</td><td class=\"County\">");
        if (useCityInsteadOfCounty()) {
            row.push(ci.City);
        }
        else {
            row.push(ci.County);
        }
        row.push("</td></tr>");
        gridRows.push(row.join(''));
    }

    //Create an intermediary popup that is displayed on the map if a marker represents more than 1 community
    function createCommunityListPopup(mNum) {
        var theLinkedRows = gMapData.Markers[mNum].LinkedRows;
        var html = [];
        html.push("<div class=\"gPopup\">");
        html.push("<div class=\"gPopupData\">");
        html.push("<b>Select a Community</b><br/>");
        for (var i = 0; i < gMapData.Markers[mNum].LinkedRows.length; i++) {
            var curCommNum = gMapData.Markers[mNum].LinkedRows[i];
            var curComm = gMapData.Communities[curCommNum];
            html.push("<a href=\"javascript:openTabbedCommunityPopup(" + mNum + ", " + curCommNum + ")\">" + curComm.Name + "</a>");
            if (curComm.PricesFrom) {
                var pricesFrom = curComm.PricesFrom + " ";
                var pricesFromLength = pricesFrom.length - 5;
                if (pricesFromLength > 1) {
                    pricesFrom = pricesFrom.substring(0, pricesFromLength);
                    html.push(" - From the $" + pricesFrom + "0's<br/>");
                }
                else
                    html.push("<br/>");
            }
        }
        html.push("</div></div>");
        return html.join('');
    }

    function openTabbedCommunityPopup(mNum, cNum) {
        markers_r[mNum].openInfoWindowTabsHtml([createCommunityBasicInfoTab(gMapData.Communities[cNum]), createDrivingDirectionsTab(gMapData.Communities[cNum].DrivingDirections)]);
    }

    //Construct a GInfoWindowTab containing the basic info for a community
    function createCommunityBasicInfoTab(ci) {
        var tab = [];
        tab.push("<div class='gPopup'>");
        var commURL = "/FindYourHome/CommunityDetails.aspx?Community=" + ci.CommunityID;
        tab.push("<div class='gPopupTitle'><a href='" + commURL + "'>" + ci.Name + "</a></div>");
        tab.push("<div class='gPopupImageDiv'><a href='" + commURL + "'><img class='gPopupImage' src='");
        if (ci.Thumbnail == null) {
            tab.push("/images/_na.gif")
        }
        else {
            tab.push(ci.Thumbnail);
        }
        tab.push("' /></a></div>");
        tab.push("<div class='gPopupData'>");
        if (ci.PricesFrom) {
            if (ci.PricesFrom.length >= 6) {
                tab.push("<b>Prices From: </b>" + ci.PricesFrom.substring(0, 2) + "0's<br/>");
            }
        }
        tab.push("<b>Sq Ft: </b>" + ci.SquareFeet + "<br/>");
        tab.push("<b>Schools: </b>" + ci.SchoolDistrict + "<br/>");
        tab.push("<b>City: </b>" + ci.City + "<br/>");
        tab.push("<b>Home Type: </b>");
        for (var i = 0; i < ci.HouseTypes.length; i++) {
            if (i != ci.HouseTypes.length - 1) {
                tab.push(ci.HouseTypes[i] + ", ");
            }
            else {
                tab.push(ci.HouseTypes[i]);
            }
        }
        tab.push("</div>");
        tab.push("</div>");
        return new GInfoWindowTab('Details', tab.join(''));
    }

    function zoomToCommunity(mNum, cNum) {
        map.setCenter(new GLatLng((markers[mNum].getLatLng().lat() + .0097), (markers[mNum].getLatLng().lng())));
        map.setZoom(14);
        openTabbedCommunityPopup(mNum, cNum);
    }

    //// INVENTORY HOME FUNCTIONS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    function GetInventoryMapData() {
        GMapDataService.GetInventoryHomeMarkers(divisionID, inventorySortColumn, inventorySortOrder, constructInventoryMapAndGrid);
        initializeMap();
    }

    //Construct the Inventory Home Grid Header
    //Return as string containing the HTML
    function createInventoryGridHeader() {
        var row = [];
        row.push("<tr><th class=\"Zoom\">Zoom</th>");
        row.push("<th class=\"Inv_PlanName\">");
        row.push("<a href=\"javascript:sortInventoryBy('PlanName', '");
        if ((inventorySortColumn != "PlanName") || (inventorySortOrder == "DESC"))
            row.push("ASC");
        else
            row.push("DESC");
        row.push("');\">Home Plan</a>");
        if (inventorySortColumn == "PlanName") {
            if (inventorySortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        row.push("</th><th class=\"Inv_SquareFeet\"><a href=\"javascript:sortInventoryBy('SquareFeet', '");
        if ((inventorySortColumn != "SquareFeet") || (inventorySortOrder == "DESC"))
            row.push("ASC");
        else
            row.push("DESC");
        row.push("');\">Square Feet</a>");
        if (inventorySortColumn == "SquareFeet") {
            if (inventorySortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        row.push("</th><th class=\"Inv_Price\"><a href=\"javascript:sortInventoryBy('Price', '");
        if ((inventorySortColumn != "Price") || (inventorySortOrder == "DESC"))
            row.push("ASC");
        else
            row.push("DESC");
        row.push("');\">Price</a>");
        if (inventorySortColumn == "Price") {
            if (inventorySortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        row.push("</th><th class=\"Inv_CommunityName\"><a href=\"javascript:sortInventoryBy('CommunityName', '");
        if ((inventorySortColumn != "CommunityName") || (inventorySortOrder == "DESC"))
            row.push("ASC");
        else
            row.push("DESC");
        row.push("');\">Community</a>");
        if (inventorySortColumn == "CommunityName") {
            if (inventorySortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        row.push("</th><th class=\"Inv_HouseType\"><a href=\"javascript:sortInventoryBy('HomeType', '");
        if ((inventorySortColumn != "HomeType") || (inventorySortOrder == "DESC"))
            row.push("ASC");
        else
            row.push("DESC");
        row.push("');\">Home Type</a>");
        if (inventorySortColumn == "HomeType") {
            if (inventorySortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        row.push("</th><th class=\"Inv_Homesite\">Homesite</th></tr>");
        return row.join('');
    }

    //Construct the Inventory Grid and insert into proper DIV
    function constructInventoryMapAndGrid(data) {
        gMapData = data;
        createInventoryGrid();
        createInventoryMap();
    }

    function createInventoryGrid() {
        var height = (26 * gMapData.InventoryHomes.length);
        if (height > 303)
            height = 303;
        if (height < 36)
            height = 36;
        gridRows.push('<table>');
        gridRows.push(createInventoryGridHeader());
        gridRows.push('</table><div ');
        if (height >= 303)
           gridRows.push('class=\'ScrollableTable2\'');
        gridRows.push('id=\'gridTable\' style=\'height:' + height + 'px;\'><table>');
        for (var i = 0; i < gMapData.InventoryHomes.length; i++) {
            createInventoryRow(i, height);
        }
        gridRows.push('</table></div>');
        document.getElementById("GMapGrid").innerHTML = gridRows.join('');
    }

    //Add the markers to the Map
    function createInventoryMap() {
        for (var i = 0; i < gMapData.Markers.length; i++) {
            createInventoryMarker(i);
            updateMapCorners(gMapData.Markers[i].Latitude, gMapData.Markers[i].Longitude);
        }
        createDesignCenterMarker();
        setMapCenterZoom();
        for (var i = 0; i < markers.length; i++) {
            map.addOverlay(markers[i]);
            map.addOverlay(markers_r[i]);
            markers_r[i].hide();
        }
    }

    //Create an Inventory Home Marker and add to the markers array
    function createInventoryMarker(markerNum) {
        var icon = mi_icon_n;
        var icon_r = mi_icon_r;
        
        var marker = new GMarker(new GLatLng(gMapData.Markers[markerNum].Latitude, gMapData.Markers[markerNum].Longitude), icon);
        var marker_r = new GMarker(new GLatLng(gMapData.Markers[markerNum].Latitude, gMapData.Markers[markerNum].Longitude), { icon: icon_r, zIndexProcess: orderOfCreation, title: "Click for more info" });
        GEvent.addListener(marker_r, "click", function() {
            if (gMapData.Markers[markerNum].LinkedRows.length == 1) {
                marker.openInfoWindowTabsHtml([createInventoryBasicInfoTab(gMapData.InventoryHomes[gMapData.Markers[markerNum].LinkedRows[0]]), createDrivingDirectionsTab(gMapData.InventoryHomes[gMapData.Markers[markerNum].LinkedRows[0]].DrivingDirections)]);
            }
            else if (gMapData.Markers[markerNum].LinkedRows.length > 1) {
                marker.openInfoWindowHtml(createInventoryListPopup(markerNum));
            }
        });
        GEvent.addListener(marker, "mouseover", function() {
            highlightMarker(markerNum);
            unHighlightRows();
            for (var i = 0; i < gMapData.Markers[markerNum].LinkedRows.length; i++) {
                var id = "IH" + gMapData.InventoryHomes[gMapData.Markers[markerNum].LinkedRows[i]].ListingID;
                highlightedRows.push(id);
            }
            scrollToRows();
            highlightRows();
        });
        markers.push(marker);
        markers_r.push(marker_r);
    }

    //Create a row for the Inventory Home Grid with the proper information
    function createInventoryRow(iNum, height) {
        var inv = gMapData.InventoryHomes[iNum];
        var row = [];
        var invURL = "/FindYourHome/PlanDetails.aspx?listing=" + inv.ListingID + "&listingType=S";
        var id = "IH" + inv.ListingID;
        row.push("<tr id='" + id + "' onmouseover=\"highlightRow('" + id + "');highlightMarker(" + inv.MarkerRef + ");\">");
        row.push("<td class=\"Zoom\" style=\"text-align:center;\"><a href=\"javascript:zoomToInventoryHome(" + inv.MarkerRef + ", " + iNum + ");\"><img src='/images/GoogleMapsIcons/MagnifyingGlass.gif' /></a></td><td ");
        if (height < 303) {
            row.push("class=\"Inv_PlanName_NoScroll\" >");
        }
        else{
            row.push("class=\"Inv_PlanName\" >");
        }
        row.push("<a href='" + invURL + "'>" + inv.PlanName + "</a>");
        row.push("</td><td ");
        if (height < 303) {
            row.push("class=\"Inv_SquareFeet_NoScroll\">");
        }
        else{
            row.push("class=\"Inv_SquareFeet\">");
        }
        
        row.push("" + inv.SquareFeet);
        row.push("</td><td ");
        if (height < 303) {
            row.push("class=\"Inv_Price_NoScroll");
        }
        else {
            row.push("class=\"Inv_Price");
        }
        if (inv.Price) {
            if (inv.Price < inv.PrevPrice) {
                row.push(" newprice");
            }
            row.push("\">" + formatCurrency(inv.Price));
        }
        else
            row.push("\">Coming Soon");
        row.push("</td><td ");
        if (height < 303) {
            row.push("class=\"Inv_CommunityName_NoScroll\">");
        }
        else {
            row.push("class=\"Inv_CommunityName\">");
        }
        row.push("<a href='/FindYourHome/CommunityDetails.aspx?Community=" + inv.CommunityID + "'>" + inv.CommunityName + "</a>");
        row.push("</td><td ");
        if (height < 303) {
            row.push("class=\"Inv_HouseType_NoScroll\">");
        }
        else {
            row.push("class=\"Inv_HouseType\">");
        }
        if (inv.HomeType == "Single Family") {
            row.push("<img src=\"/images/DivisionLanding/hometype_marker_SF.gif\"  title=\"Single Family\" style=\"width:20px; height:16px;\" />");
        }
        else if (inv.HomeType == "Town Home") {
            row.push("<img src=\"/images/DivisionLanding/hometype_marker_TH.gif\" title=\"Town Home\" style=\"width:20px; height:16px;\" />");
        }
        else if (inv.HomeType == "Condo") {
            row.push("<img src=\"/images/DivisionLanding/hometype_marker_C.gif\" title=\"Condo\" style=\"width:20px; height:16px;\" />");
        }
        row.push("</td><td ");
        if (height < 303) {
            row.push("class=\"Inv_Homesite_NoScroll\">");
        }
        else {
            row.push("class=\"Inv_Homesite\">");
        }
        row.push(inv.LotNumber);
        row.push("</td></tr>");
        gridRows.push(row.join(''));
    }

    //Create an intermediary popup that is displayed on the map if a marker represents more than 1 home
    function createInventoryListPopup(mNum) {
        var html = [];
        html.push("<div class=\"gPopup\">");
        html.push("<div class=\"gPopupData\">");
        html.push("<b>Select an Inventory Home</b><br/>");
        for (var i = 0; i < gMapData.Markers[mNum].LinkedRows.length; i++) {
            var curInvNum = gMapData.Markers[mNum].LinkedRows[i];
            var curInv = gMapData.InventoryHomes[curInvNum];
            html.push("<a href=\"javascript:openTabbedInventoryPopup(" + mNum + ", " + curInvNum + ")\">" + curInv.PlanName + "</a>");
            html.push(" - Lot " + curInv.LotNumber);
            if (curInv.Price)
                html.push(" - " + formatCurrency(curInv.Price));
            html.push("<br/>");
        }
        html.push("</div></div>");
        return html.join('');
    }

    function openTabbedInventoryPopup(mNum, iNum) {
        markers_r[mNum].openInfoWindowTabsHtml([createInventoryBasicInfoTab(gMapData.InventoryHomes[iNum]), createDrivingDirectionsTab(gMapData.InventoryHomes[iNum].DrivingDirections)]);
    }

    //Construct a GInfoWindowTab containing the basic info for an inventory home
    function createInventoryBasicInfoTab(inv) {
        var tab = [];
        tab.push("<div class='gPopup'>");
        var invURL = "/FindYourHome/PlanDetails.aspx?listing=" + inv.ListingID + "&listingType=S";
        tab.push("<div class='gPopupTitle'><a href='" + invURL + "'>" + inv.PlanName + "</a></div>");
        tab.push("<div class='gPopupImageDiv'><a href='" + invURL + "'><img class='gPopupImage' src='");
        if (inv.Thumbnail == null) {
            tab.push("/images/_na.gif")
        }
        else {
            tab.push(inv.Thumbnail);
        }
        tab.push("' /></a></div>");
        tab.push("<div class='gPopupData'>");
        if (inv.Price) {
            tab.push("<b>Price: </b>");
            tab.push("<span");
            if (inv.PrevPrice > inv.Price)
                tab.push(" class='newprice'");
            tab.push(">" + formatCurrency(inv.Price) + "</span><br/>");
        }
        tab.push("<b>Sq Ft: </b>" + inv.SquareFeet + "<br/>");
        tab.push("<b>Schools: </b>" + inv.SchoolDistricts + "<br/>");
        tab.push("<b>County: </b>" + inv.County + "<br/>");
        tab.push("<b>City: </b>" + inv.City + "<br/>");
        tab.push("<b>Homesite: </b>" + inv.LotNumber + "<br/>");
        tab.push("</div>");
        tab.push("</div>");
        return new GInfoWindowTab('Details', tab.join(''));
    }

    function zoomToInventoryHome(mNum, iNum) {
        map.setCenter(new GLatLng((markers[mNum].getLatLng().lat() + .0097), (markers[mNum].getLatLng().lng())));
        map.setZoom(14);
        openTabbedInventoryPopup(mNum, iNum);
    }

    //// MODEL HOME FUNCTIONS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    function GetModelMapData() {
        GMapDataService.GetModelHomeMarkers(divisionID, modelSortColumn, modelSortOrder, constructModelMapAndGrid);
        initializeMap();
    }

    //Construct the Model Home Grid Header
    // type should equal 'salesoffice' or 'unstaffed'
    //Return as string containing the HTML
    function createModelGridHeader(type) {
        var row = [];
        if (type == "salesoffice") {
            row.push("<tr style=\"background-color: #7D0849; height:30px;\"><td colspan=\"7\" align=\"center\"><img src='/images/GoogleMapsIcons/salesoffice_header.gif' /></td></tr>");
        }
        else if (type == "unstaffed") {
            row.push("<tr style=\"background-color: #7D0849; height:30px;\"><td colspan=\"7\" align=\"center\"><img src='/images/GoogleMapsIcons/unstaffedmodel_header.gif' /></td></tr>");
        }
        row.push("<tr><th class=\"Zoom\">Zoom</th>");
        row.push("<th class=\"Mod_PlanName\">");
        row.push("<a href=\"javascript:sortModelBy('PlanName', '");
        if ((modelSortColumn != "PlanName") || (modelSortOrder == "DESC"))
            row.push("ASC");
        else
            row.push("DESC");
        row.push("');\">Home Plan</a>");
        if (modelSortColumn == "PlanName") {
            if (modelSortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        row.push("</th><th class=\"Mod_SquareFeet\"><a href=\"javascript:sortModelBy('SquareFeet', '");
        if ((modelSortColumn != "SquareFeet") || (modelSortOrder == "DESC"))
            row.push("ASC");
        else
            row.push("DESC");
        row.push("');\">Sq Ft</a>");
        if (modelSortColumn == "SquareFeet") {
            if (modelSortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        row.push("</th><th class=\"Mod_Bedrooms\"><a href=\"javascript:sortModelBy('Bedrooms', '");
        if ((modelSortColumn != "Bedrooms") || (modelSortOrder == "DESC"))
            row.push("ASC");
        else
            row.push("DESC");
        row.push("');\">Beds</a>");
        if (modelSortColumn == "Bedrooms") {
            if (modelSortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        row.push("</th><th class=\"Mod_CommunityName\"><a href=\"javascript:sortModelBy('CommunityName', '");
        if ((modelSortColumn != "CommunityName") || (modelSortOrder == "DESC"))
            row.push("ASC");
        else
            row.push("DESC");
        row.push("');\">Community</a>");
        if (modelSortColumn == "CommunityName") {
            if (modelSortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        row.push("</th><th class=\"Mod_HouseType\"><a href=\"javascript:sortModelBy('HomeType', '");
        if ((modelSortColumn != "HomeType") || (modelSortOrder == "DESC"))
            row.push("ASC");
        else
            row.push("DESC");
        row.push("');\">Home Type</a>");
        if (modelSortColumn == "HomeType") {
            if (modelSortOrder == "ASC")
                row.push("<img src='" + sortIconASC + "' />");
            else
                row.push("<img src='" + sortIconDESC + "' />");
        }
        row.push("</th><th class=\"Mod_VirtualTour\">Virtual Tour</th>");
        row.push("</th></tr>");
        return row.join('');
    }

    function constructModelMapAndGrid(data) {
        gMapData = data;
        createModelGrid();
        createModelMap();
    }

    //Construct the Model Home Grid and insert into proper DIV
    function createModelGrid() {
        var salesOfficeHeight = (25 * gMapData.ModelHomes.length) + 5;
        //if (height > 303)
        //   height = 303;0
        if (salesOfficeHeight < 36)
            salesOfficeHeight = 36;
        var unstaffedHeight = (25 * gMapData.UnstaffedModelHomes.length) + 5;
        //if (height > 303)
        //   height = 303;0
        if (unstaffedHeight < 36)
            unstaffedHeight = 36;
        if (gMapData.ModelHomes.length > 0) {
            gridRows.push('<table>');
            gridRows.push(createModelGridHeader("salesoffice"));
            gridRows.push('</table><div ');
            //if (height < 303)
            //gridRows.push('\'ScrollableTable\'');
            //else
            //    gridRows.push('\'ScrollableTable2\'');
            gridRows.push('id=\'gridTable\' style=\'height:' + salesOfficeHeight + 'px;\'><table>');
            for (var i = 0; i < gMapData.ModelHomes.length; i++) {
                createModelRow(i, "salesoffice");
            }
            gridRows.push('</table></div>');
        }
        if (gMapData.UnstaffedModelHomes.length > 0) {
            gridRows.push('<table>');
            gridRows.push(createModelGridHeader("unstaffed"));
            gridRows.push('</table><div ');
            //if (height < 303)
            //gridRows.push('\'ScrollableTable\'');
            //else
            //    gridRows.push('\'ScrollableTable2\'');
            gridRows.push('id=\'gridTable2\' style=\'height:' + unstaffedHeight + 'px;\'><table>');
            for (var i = 0; i < gMapData.UnstaffedModelHomes.length; i++) {
                createModelRow(i, "unstaffed");
            }
            gridRows.push('</table></div>');
        }
        document.getElementById("GMapGrid").innerHTML = gridRows.join('');
    }

    //Add the markers to the Map
    function createModelMap() {
        for (var i = 0; i < gMapData.Markers.length; i++) {
            createModelMarker(i);
            updateMapCorners(gMapData.Markers[i].Latitude, gMapData.Markers[i].Longitude);
        }
        createDesignCenterMarker();
        setMapCenterZoom();
        for (var i = 0; i < markers.length; i++) {
            map.addOverlay(markers[i]);
            map.addOverlay(markers_r[i]);
            markers_r[i].hide();
        }
    }

    //Create a Model Home Marker and add to the markers array
    function createModelMarker(markerNum) {

        var icon = sales_icon_n;
        var icon_r = mi_icon_r;
        if (gMapData.Markers[markerNum].HasSalesOffice == false) {
            icon = mi_icon_n;
            icon_r = mi_icon_r;
        }
        
        var marker = new GMarker(new GLatLng(gMapData.Markers[markerNum].Latitude, gMapData.Markers[markerNum].Longitude), icon);
        var marker_r = new GMarker(new GLatLng(gMapData.Markers[markerNum].Latitude, gMapData.Markers[markerNum].Longitude), { icon: icon_r, zIndexProcess: orderOfCreation, title: "Click for more info" });
        GEvent.addListener(marker_r, "click", function() {
            if (gMapData.Markers[markerNum].ModelLinkedRows.length == 1) {
                var curInvType = gMapData.Markers[markerNum].ModelLinkedRows[0].ModelType;

                if (curInvType == "unstaffed") {
                    marker.openInfoWindowTabsHtml([createModelBasicInfoTab(gMapData.UnstaffedModelHomes[gMapData.Markers[markerNum].ModelLinkedRows[0].Index]), createDrivingDirectionsTab(gMapData.UnstaffedModelHomes[gMapData.Markers[markerNum].ModelLinkedRows[0].Index].DrivingDirections)]);
                }
                else {
                    marker.openInfoWindowTabsHtml([createModelBasicInfoTab(gMapData.ModelHomes[gMapData.Markers[markerNum].ModelLinkedRows[0].Index]), createDrivingDirectionsTab(gMapData.ModelHomes[gMapData.Markers[markerNum].ModelLinkedRows[0].Index].DrivingDirections)]);
                }
            }
            else if (gMapData.Markers[markerNum].ModelLinkedRows.length > 1) {
                marker.openInfoWindowHtml(createModelListPopup(markerNum));
            }
        });
        GEvent.addListener(marker, "mouseover", function() {
            highlightMarker(markerNum);
            unHighlightRows();
            for (var i = 0; i < gMapData.Markers[markerNum].ModelLinkedRows.length; i++) {
                var curInvType = gMapData.Markers[markerNum].ModelLinkedRows[i].ModelType;
                if (curInvType == "unstaffed") {
                    var id = "IH" + gMapData.UnstaffedModelHomes[gMapData.Markers[markerNum].ModelLinkedRows[i].Index].ListingID;
                    highlightedRows.push(id);
                }
                else {
                    var id = "IH" + gMapData.ModelHomes[gMapData.Markers[markerNum].ModelLinkedRows[i].Index].ListingID;
                    highlightedRows.push(id);
                }
            }
            scrollToRows();
            highlightRows();
        });
        markers.push(marker);
        markers_r.push(marker_r);
    }

    //Create a row for the Model Home Grid with the proper information
    //type should equal "salesoffice" or "unstaffed"
    function createModelRow(hNum, type) {
        var mod = gMapData.ModelHomes[hNum];
        if (type == "unstaffed") {
            mod = gMapData.UnstaffedModelHomes[hNum];
        }

        var row = [];
        var modURL = "/FindYourHome/PlanDetails.aspx?listing=" + mod.ListingID + "&listingType=M";
        var id = "IH" + mod.ListingID;
        row.push("<tr id='" + id + "' onmouseover=\"highlightRow('" + id + "');highlightMarker(" + mod.MarkerRef + ");\">");
        if (type == "unstaffed") {
            row.push("<td class=\"Zoom\" style=\"text-align:center;\"><a href=\"javascript:zoomToModelHome(" + mod.MarkerRef + ", " + hNum + ", 'unstaffed');\"><img src='/images/GoogleMapsIcons/MagnifyingGlass.gif' /></a></td><td class=\"Mod_PlanName\" >");
        }
        else {
            row.push("<td class=\"Zoom\" style=\"text-align:center;\"><a href=\"javascript:zoomToModelHome(" + mod.MarkerRef + ", " + hNum + ", 'salesoffice');\"><img src='/images/GoogleMapsIcons/MagnifyingGlass.gif' /></a></td><td class=\"Mod_PlanName\" >");
        }
        row.push("<a href='" + modURL + "'>" + mod.PlanName + "</a>");
        row.push("</td><td class=\"Mod_SquareFeet\">");
        row.push("" + mod.SquareFeet);
        row.push("</td><td class=\"Mod_Bedrooms\">");
        row.push(mod.Bedrooms);
        row.push("</td><td class=\"Mod_CommunityName\">");
        row.push("<a href='/FindYourHome/CommunityDetails.aspx?Community=" + mod.CommunityID + "'>" + mod.CommunityName + "</a>");
        row.push("</td><td class=\"Mod_HouseType\">");
        if (mod.HomeType == "Single Family") {
            row.push("<img src=\"/images/DivisionLanding/hometype_marker_SF.gif\"  title=\"Single Family\" style=\"width:20px; height:16px;\" />");
        }
        else if (mod.HomeType == "Town Home") {
            row.push("<img src=\"/images/DivisionLanding/hometype_marker_TH.gif\" title=\"Town Home\" style=\"width:20px; height:16px;\" />");
        }
        else if (mod.HomeType == "Condo") {
            row.push("<img src=\"/images/DivisionLanding/hometype_marker_C.gif\" title=\"Condo\" style=\"width:20px; height:16px;\" />");
        }
        if (mod.IsSalesOffice == true) {
            row.push("<img src=\"/images/GoogleMapsIcons/model_icon.png\" title=\"Sales Office\" style=\"width:20px; height:16px;\" />");
        }
        row.push("<img src=\"/images/GoogleMapsIcons/modelnonsalesoffice_icon.png\" title=\"Model Home\" style=\"width:20px; height:16px;\" />");
        row.push("</td><td class=\"Mod_VirtualTour\">");
        if (mod.VirtualTourLink) {
            row.push("<a href=\"javascript:openWindowPlanPopup('" + mod.VirtualTourLink + "');\">Virtual Tour</a>");
        }
        row.push("</td></tr>");
        gridRows.push(row.join(''));
    }

    //Create an intermediary popup that is displayed on the map if a marker represents more than 1 home
    function createModelListPopup(mNum) {
        var html = [];
        html.push("<div class=\"gPopup\">");
        html.push("<div class=\"gPopupData\">");
        html.push("<b>Select an Model Home</b><br/>");
        for (var i = 0; i < gMapData.Markers[mNum].ModelLinkedRows.length; i++) {
            var curInvType = gMapData.Markers[mNum].ModelLinkedRows[i].ModelType;
            var curInvNum = gMapData.Markers[mNum].ModelLinkedRows[i].Index;
            var curInv;
            if (curInvType == "salesoffice") {
                curInv = gMapData.ModelHomes[curInvNum];
                html.push("<a href=\"javascript:openTabbedModelPopup(" + mNum + ", " + curInvNum + ", 'salesoffice')\">" + curInv.PlanName + "</a><br/>")
            }
            else {
                curInv = gMapData.UnstaffedModelHomes[curInvNum];
                html.push("<a href=\"javascript:openTabbedModelPopup(" + mNum + ", " + curInvNum + ", 'unstaffed')\">" + curInv.PlanName + "</a><br/>")
            }


        }
        html.push("</div></div>");
        return html.join('');
    }

    function openTabbedModelPopup(mNum, hNum, type) {
        if (type == "unstaffed") {
            markers_r[mNum].openInfoWindowTabsHtml([createModelBasicInfoTab(gMapData.UnstaffedModelHomes[hNum]), createDrivingDirectionsTab(gMapData.UnstaffedModelHomes[hNum].DrivingDirections)]);
        }
        else {
            markers_r[mNum].openInfoWindowTabsHtml([createModelBasicInfoTab(gMapData.ModelHomes[hNum]), createDrivingDirectionsTab(gMapData.ModelHomes[hNum].DrivingDirections)]);
        }
    }

    //Construct a GInfoWindowTab containing the basic info for a model home
    function createModelBasicInfoTab(mod) {
        var tab = [];
        tab.push("<div class='gPopup'>");
        var modURL = "/FindYourHome/PlanDetails.aspx?listing=" + mod.ListingID + "&listingType=M";
        tab.push("<div class='gPopupTitle'><a href='" + modURL + "'>" + mod.PlanName + "</a></div>");
        tab.push("<div class='gPopupImageDiv'><a href='" + modURL + "'><img class='gPopupImage' src='");
        if (mod.Thumbnail == null) {
            tab.push("/images/_na.gif")
        }
        else {
            tab.push(mod.Thumbnail);
        }
        tab.push("' /></a></div>");
        tab.push("<div class='gPopupData'>");
        tab.push("<b>Bedrooms: </b>" + mod.Bedrooms + "<br/>");
        tab.push("<b>Sq Ft: </b>" + mod.SquareFeet + "<br/>");
        tab.push("<b>Schools: </b>" + mod.SchoolDistricts + "<br/>");
        tab.push("<b>County: </b>" + mod.County + "<br/>");
        tab.push("<b>City: </b>" + mod.City + "<br/>");
        tab.push("<b>Home Type: </b>" + mod.HomeType + "<br/>");
        if (mod.VirtualTourLink) {
            tab.push("<span class=\"gPopupDataBullet\">&raquo; </span>");
            tab.push("<a href=\"javascript:openWindowPlanPopup('" + mod.VirtualTourLink + "');\">Virtual Tour</a>");
        }
        tab.push("</div>");
        tab.push("</div>");
        return new GInfoWindowTab('Details', tab.join(''));
    }

    //type should equal "salesoffice" or "unstaffed"
    function zoomToModelHome(mNum, hNum, type) {
        map.setCenter(new GLatLng((markers[mNum].getLatLng().lat() + .0097), (markers[mNum].getLatLng().lng())));
        map.setZoom(14);
        openTabbedModelPopup(mNum, hNum, type);
    }



    ////// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++      

    //Construct a Design Center Marker
    function createDesignCenterMarker() {
        if (gMapData.DesignCenter) {
            var icon = designCenterIcon_n;
            var icon_r = designCenterIcon_r;
            var markerNum = markers.length;
            var marker = new GMarker(new GLatLng(gMapData.DesignCenter.Latitude, gMapData.DesignCenter.Longitude), icon);
            var marker_r = new GMarker(new GLatLng(gMapData.DesignCenter.Latitude, gMapData.DesignCenter.Longitude), { icon: icon_r, zIndexProcess: orderOfCreation, title: "Click for more info" });
            GEvent.addListener(marker_r, "click", function() {
                marker.openInfoWindowTabsHtml([createDesignCenterBasicInfoTab(gMapData.DesignCenter), createDrivingDirectionsTab(gMapData.DesignCenter.DrivingDirections)]);
            });
            GEvent.addListener(marker, "mouseover", function() {
                highlightMarker(markerNum);
            });
            markers.push(marker);
            markers_r.push(marker_r);
        }
    }

    //Construct a GInfoWindowTab containing the basic info for the Design Center
    function createDesignCenterBasicInfoTab(DesignCenter) {
        var tab = [];
        tab.push("<div class='gPopup'>");
        tab.push("<div class='gPopupTitle'><a href='/DesignCenter/DesignCenter.aspx?Division=" + DesignCenter.DivisionID + "'>DESIGN CENTER</a></div>");
        tab.push("<div class='gPopupData'>");
        tab.push(DesignCenter.Address + "<br/>");
        tab.push(DesignCenter.City + ", " + DesignCenter.State + "<br/>");
        tab.push(DesignCenter.PhoneNumber + "<br/><br/>");
        tab.push("Office Hours<br/>" + DesignCenter.OfficeHours + "<br/><br/>");
        tab.push("<span class='popupBullet'>&raquo; </span>");
        tab.push("<a href='/ContactUs/ContactDesignCenter.aspx?Division=" + DesignCenter.DivisionID + "' style='margin-right:6px;'>Contact Us</a>");
        tab.push("<span class='popupBullet'>&raquo; </span>");
        tab.push("<a href='/DesignCenter/DesignCenter.aspx?Division=" + DesignCenter.DivisionID + "'>More Information</a>");
        tab.push("</div></div>");
        return new GInfoWindowTab('Details', tab.join(''));
    }

    //Construct a GInfoWindowTab containing the given driving directions
    function createDrivingDirectionsTab(directions) {
        var tab = [];
        tab.push("<div class='gPopup' style='width:250px;'>");
        tab.push("<div class='gPopupData'>");
        tab.push(directions);
        tab.push("</div></div>");
        return new GInfoWindowTab('Directions', tab.join(''));
    }

    //Used to move a marker to the top in terms of z-index
    function orderOfCreation(marker, b) {
        return 100;
    }

    //For each marker, update the map boundries
    function updateMapCorners(lat, lng) {
        if (lat > nwLat)
            nwLat = lat;
        if (lng < nwLong)
            nwLong = lng;
        if (lat < seLat)
            seLat = lat;
        if (lng > seLong)
            seLong = lng;
    }

    //After adding all markers, set center and zoom level
    function setMapCenterZoom() {
        if ((nwLat > 0) && (seLat < 360)) {
            var centerLat = ((nwLat + seLat) / 2);
            var centerLong = ((nwLong + seLong) / 2);
            var diff = .05;
            var sw = new GLatLng((seLat - diff), (nwLong - diff));
            var ne = new GLatLng((nwLat + diff), (seLong + diff));
            var zoom = map.getBoundsZoomLevel(new GLatLngBounds(sw, ne));
            map.setCenter(new GLatLng(centerLat, centerLong), zoom);
        }
        else {
            var lat = 39.9542;
            var lng = -82.9756;
            var zoom = 4;
            map.setCenter(new GLatLng(lat, lng), zoom);
        }
    }

    function scrollToRows() {
        var offset = 10000;
        var grid = document.getElementById("gridTable");
        for (var i = 0; i < highlightedRows.length; i++) {
            var row = document.getElementById(highlightedRows[i]);
            if (row.offsetTop < offset)
                offset = row.offsetTop;
        }
        grid.scrollTop = offset;
    }

    function unHighlightRows() {
        for (var i = 0; i < highlightedRows.length; i++) {
            document.getElementById(highlightedRows[i]).className = "";
        }
        highlightedRows.length = 0;
    }

    function highlightRows() {
        for (var i = 0; i < highlightedRows.length; i++) {
            document.getElementById(highlightedRows[i]).className = "highlightedRow";
        }
    }

    function highlightRow(id) {
        unHighlightRows();
        highlightedRows.push(id);
        highlightRows();
    }

    function highlightMarker(markerNum) {

        if (lastHighlightedMarkerNum != -1) {
            //var icon = markers[lastHighlightedMarkerNum].getIcon().image;
            //markers[lastHighlightedMarkerNum].setImage(icon.substring(0, icon.length-5) + "n.png");
            markers[lastHighlightedMarkerNum].show();
            markers_r[lastHighlightedMarkerNum].hide();
        }
        /*
        var icon2 = markers[markerNum].getIcon().image;
        markers[markerNum].setImage(icon2.substring(0, icon2.length-5) + "r.png");
        */
        markers[markerNum].hide();
        markers_r[markerNum].show();
        lastHighlightedMarkerNum = markerNum;
    }

    function formatCurrency(strValue) {
        try {
            strValue = strValue.toString().replace(/\$|\,/g, '');
            dblValue = parseFloat(strValue);
            strDollar = '$&nbsp;';
            if (dblValue < 100000)
                strDollar = '$&nbsp;&nbsp;&nbsp;';

            blnSign = (dblValue == (dblValue = Math.abs(dblValue)));
            dblValue = Math.floor(dblValue * 100 + 0.50000000001);
            dblValue = Math.floor(dblValue / 100).toString();
            for (var i = 0; i < Math.floor((dblValue.length - (1 + i)) / 3); i++)
                dblValue = dblValue.substring(0, dblValue.length - (4 * i + 3)) + ',' +
                dblValue.substring(dblValue.length - (4 * i + 3));

            return (((blnSign) ? '' : '-') + strDollar + dblValue);
        }
        catch (e) {
            return " ";
        }
    }

    //Toggle between Community, Inventory Home, and Model Home
    function setMapType(id) {
        resetVariables();

        if (id == 1) {
            GetCommunityMapData();
        } else if (id == 2) {
            GetInventoryMapData();
        } else if (id == 3) {
            GetModelMapData();
        }
    }

    function sortCommunityBy(column, order) {
        resetVariables();
        communitySortColumn = column;
        communitySortOrder = order;
        GetCommunityMapData();
    }

    function sortInventoryBy(column, order) {
        resetVariables();
        inventorySortColumn = column;
        inventorySortOrder = order;
        GetInventoryMapData();
    }

    function sortModelBy(column, order) {
        resetVariables();
        modelSortColumn = column;
        modelSortOrder = order;
        GetModelMapData();
    }

    function useCityInsteadOfCounty() {
        if ((divisionID == "298000000000") || (divisionID == "230000000000") || (divisionID == "270000000000") || (divisionID == "275000000000") || (divisionID == "245000000000") || (divisionID == "250000000000") || (divisionID == "297000000000")) {
            return true;
        }
        return false;
    }
} //End check for Google Map compatibility


//Normal Icons
var mi_icon_n;
var sc_icon_n;
var sales_icon_n;
var designCenterIcon_n;
//Rollover Icons
var mi_icon_r;
var sc_icon_r;
var sales_icon_r;
var designCenterIcon_r;


//Initialize Google Map Icons
function setupMarkerIcons() {
    mi_icon_n = new GIcon();
    mi_icon_n.image = "/images/GoogleMapsIcons/new_mi_icon_n.png";
    mi_icon_n.iconSize = new GSize(20, 30);
    mi_icon_n.iconAnchor = new GPoint(10, 30);
    mi_icon_n.infoWindowAnchor = new GPoint(17, 6);
    mi_icon_n.imageMap = [7, 6, 3, 11, 3, 16, 7, 22, 8, 28, 12, 28, 13, 22, 17, 16, 17, 11, 12, 6];
    sales_icon_n = new GIcon();
    sales_icon_n.image = "/images/GoogleMapsIcons/new_mi_icon_n2.gif";
    sales_icon_n.iconSize = new GSize(20, 30);
    sales_icon_n.iconAnchor = new GPoint(10, 30);
    sales_icon_n.infoWindowAnchor = new GPoint(17, 6);
    sales_icon_n.imageMap = [7, 6, 3, 11, 3, 16, 7, 22, 8, 28, 12, 28, 13, 22, 17, 16, 17, 11, 12, 6];
    sc_icon_n = new GIcon();
    sc_icon_n.image = "/images/GoogleMapsIcons/new_mi_icon_n.png";
    sc_icon_n.iconSize = new GSize(20, 30);
    sc_icon_n.iconAnchor = new GPoint(10, 30);
    sc_icon_n.infoWindowAnchor = new GPoint(18, 1);
    sc_icon_n.imageMap = [7, 6, 3, 11, 3, 16, 7, 22, 8, 28, 12, 28, 13, 22, 17, 16, 17, 11, 12, 6];
    designCenterIcon_n = new GIcon();
    designCenterIcon_n.image = "/images/GoogleMapsIcons/mi_dc_n.png";
    designCenterIcon_n.iconSize = new GSize(27, 27);
    designCenterIcon_n.iconAnchor = new GPoint(0, 26);
    designCenterIcon_n.infoWindowAnchor = new GPoint(7, 0);
    designCenterIcon_n.imageMap = [0, 3, 0, 27, 5, 20, 22, 20, 27, 15, 27, 3, 23, 0, 3, 0];

    mi_icon_r = new GIcon();
    mi_icon_r.image = "/images/GoogleMapsIcons/new_mi_icon_r.png";
    mi_icon_r.iconSize = new GSize(20, 30);
    mi_icon_r.iconAnchor = new GPoint(10, 30);
    mi_icon_r.infoWindowAnchor = new GPoint(17, 6);
    mi_icon_r.imageMap = [7, 0, 0, 6, 0, 12, 6, 21, 7, 28, 13, 28, 14, 23, 19, 12, 19, 6, 12, 0];
    sc_icon_r = new GIcon();
    sc_icon_r.image = "/images/GoogleMapsIcons/new_mi_icon_r.png";
    sc_icon_r.iconSize = new GSize(20, 30);
    sc_icon_r.iconAnchor = new GPoint(10, 30);
    sc_icon_r.infoWindowAnchor = new GPoint(18, 1);
    sc_icon_r.imageMap = [7, 0, 0, 6, 0, 12, 6, 21, 7, 28, 13, 28, 14, 23, 19, 12, 19, 6, 12, 0];
    designCenterIcon_r = new GIcon();
    designCenterIcon_r.image = "/images/GoogleMapsIcons/mi_dc_r.png";
    designCenterIcon_r.iconSize = new GSize(29, 29);
    designCenterIcon_r.iconAnchor = new GPoint(0, 28);
    designCenterIcon_r.infoWindowAnchor = new GPoint(7, 0);
    designCenterIcon_r.imageMap = [0, 3, 0, 29, 6, 22, 24, 21, 28, 17, 28, 3, 24, 0, 3, 0];
}
