var timeout;
var map;
var overlays = new Array();
var overlay_index = new Array();

function init()
{
    externalLinks();
    load_map();
    do_populate();
}
function getWindowHeight()
{
    if (window.self && self.innerHeight)
    { return self.innerHeight; }
    if (document.documentElement &&
        document.documentElement.clientHeight)
    { return (document.documentElement.clientHeight - 110);}
    return 0;
}
function getWindowWidth()
{
    if (window.self && self.innerWidth)
    { return self.innerWidth; }
    if (document.documentElement &&
        document.documentElement.clientWidth)
    { return document.documentElement.clientWidth;}
    return 0;
}
function resizeMap()
{
    var offset_height = 0;
    var offset_width = 0;
    var elem = document.getElementById('map');
    var filter_elem = document.getElementById('filters');
    var copyright_elem = document.getElementById('copyright');
    var viewHeight = getWindowHeight();
    var viewWidth = getWindowWidth();

    offset_height += document.getElementById('header').clientHeight;
    var height = viewHeight - offset_height - 70;
    var width = viewWidth - offset_width - 10;

    if (height > 0)
    {
        elem.style.height = height + "px";
        filter_elem.style.height = height+"px";

        var copyright_height = viewHeight;
        if(!window.self || !self.innerHeight)
        { copyright_height += 110; }
        copyright_elem.style.top = copyright_height+"px";
    }
    if (width > 0)
    { elem.style.width = width + "px"; }

    populate_map();
}
function recenter(selection)
{
    switch(selection)
    {
        case "Uptown":
            map.setCenter(new GLatLng(29.9198, -90.1253), 15);
        break;
        case "Mid-City":
            map.setCenter(new GLatLng(29.9707, -90.0831), 15);
        break;
        case "Lakeview":
            map.setCenter(new GLatLng(30.0153, -90.0855), 15);
        break;
        case "Gentilly":
            map.setCenter(new GLatLng(30.0031, -90.0506), 15);
        break;
        case "N.O. East":
            map.setCenter(new GLatLng(30.0321, -89.9734), 15);
        break;
        case "Warehouse District":
            map.setCenter(new GLatLng(29.9460, -90.0697), 15);
        break;
        case "French Quarter":
            map.setCenter(new GLatLng(29.9612,  -90.0645), 15);
        break;
        case "Marigny Bywater":
            map.setCenter(new GLatLng(29.9676, -90.0506), 15);
        break;
        case "West Bank":
            map.setCenter(new GLatLng(29.9218, -90.0268), 15);
        break;
        case "Metairie":
            map.setCenter(new GLatLng(30.0036, -90.1596), 15);
        break;
        case "Jefferson":
            map.setCenter(new GLatLng(29.9630, -90.1566), 15);
        break;
        case "Kenner":
            map.setCenter(new GLatLng(30.0172, -90.2494), 15);
        break;
        case "Mandeville":
            map.setCenter(new GLatLng(30.3708, -90.0754), 15);
        break;
        case "Covington":
            map.setCenter(new GLatLng(30.4299, -90.0851), 15);
        break;
        case "Slidell":
            map.setCenter(new GLatLng(30.282343, -89.778385), 15);
        break;

    }
}
function load_map()
{
    if (GBrowserIsCompatible())
    {
        window.onresize = resizeMap;
        resizeMap();
        map = new GMap2(document.getElementById("map"));
        map.setCenter(new GLatLng(29.9198, -90.1253), 15);
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.addControl(new GScaleControl());
        GEvent.addListener(map, "zoom", function() {do_populate()});
        GEvent.addListener(map, "moveend", function() {do_populate()});
        GEvent.addListener(map, "click", function(overlay, point)
        {
            if (overlay)
            {
                var html = '<div style="white-space:nowrap;">';

                if(overlay.count)
                {
                    html +=
                        '<b>'+
                        overlay.count +
                        '</b>'+
                        ' properties.<br />'+
'<a href="#" onclick="map.setCenter(this.point, 15)";>Zoom in</a>'+
                        ' for more detail.'
                      ;
                }
                else
                {
                    if(overlay.image)
                    {
                        html += '<img src="'+overlay.image+'" height="150" /><br />';
                    }

                    html +=
                        overlay.type_string+'<br />'+
                        overlay.address+'<br />'+
                        overlay.city+', '+overlay.zip+'<br />'+
                        '$'+overlay.price+'<br />'
                      ;

                    if(overlay.bedrooms != undefined)
                    { html += overlay.bedrooms+' bedrooms<br />'; }
                    if(overlay.bathsfull != undefined)
                    {
                        html += overlay.bathsfull+' full, '+
                                overlay.bathshalf+' half bathrooms<br />';
                    }
                    if(overlay.area != undefined)
                    { html += overlay.area+' square feet<br />'; }
                    if(overlay.condition != undefined)
                    { html += overlay.condition+' condition<br />'; }

                    html +=
                        '<a target="_blank" href="/property/'+
                        overlay.ml+
                        '">More details (new window)</a>'
                      ;
                }

                html += '</div>';

                overlay.openInfoWindowHtml(html);
            }
        });
    }
}
function populate_map()
{
    if(timeout)
    { clearTimeout(timeout); }

    timeout = setTimeout('do_populate()', 500);
}
function do_populate()
{
    var zoom = map.getZoom();

    var baseIcon = new GIcon();
    baseIcon.image = "http://restoration.parcelplot.com/images/housered.png";
    baseIcon.shadow = "http://restoration.parcelplot.com/images/houseshadow2.png";
    baseIcon.transparent = "http://www.google.com/mapfiles/markerTransparent.png";
    baseIcon.imageMap=[1,0, 1,1, 0,1, 0,20, 1,20, 1,21, 4,21, 4,23,
    5,23, 5,27, 6,27, 6,30, 7,30, 7,31, 8,31, 8,29, 9,29, 9,28, 10,28,
    10,26, 11,26, 11,25, 12,25, 12,23, 13,23, 13,21, 20,21, 20,20,
    21,20, 21,1, 20,1, 20,0];
    baseIcon.iconSize = new GSize(21, 31);
    baseIcon.shadowSize = new GSize(52, 29);
    baseIcon.iconAnchor = new GPoint(7, 31);
    baseIcon.infoWindowAnchor = new GPoint(10,2);
    baseIcon.infoShadowAnchor = new GPoint(26,20);



    if(zoom > 15)
    { zoom = 15; }
    else if(zoom < 9)
    { zoom = 9; }
    var url = 'search02.pl?zoom='+zoom;
    var form_element = document.getElementById('filter_form');
    var multiples = new Array(form_element.length);
    for(var i=0; i<form_element.length; ++i)
    {
        if(form_element[i].type == 'select-multiple')
        {
            multiples.push(form_element[i].name);
            var value_string = '';
            for(var j=0; j<form_element[i].length; ++j)
            {
                if(form_element[i][j].selected)
                { value_string += form_element[i][j].value + ':'; }
            }
            if(value_string)
            { url += '&' + form_element[i].name + '=' + value_string; }
        }
        else
        { url += '&' + form_element[i].name + '=' + form_element[i].value; }
    }
    url += '&multiples='+multiples.join(':');
    var bounds = map.getBounds();
    url += '&minY='+bounds.getSouthWest().lat()+
           '&minX='+bounds.getSouthWest().lng()+
           '&maxY='+bounds.getNorthEast().lat()+
           '&maxX='+bounds.getNorthEast().lng();

    var updated_points = new Array();

    GDownloadUrl(url, function(data, responseCode)
    {
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName("m");
        for (var i = 0; i < markers.length; i++)
        {
            var point = new
                GLatLng(parseFloat(markers[i].getAttribute("y")),
                        parseFloat(markers[i].getAttribute("x")));

            var count = markers[i].getAttribute("c");
//                 map.addOverlay(new GMarker(point));
            var key = point.lat()+point.lng();
            updated_points[key] = 1;
            var overlay_object;

            if(!overlays[key])
            {
                var icon = new GIcon(baseIcon);

//                overlay_object = new GMarker(point);
                overlay_object = new GMarker(point, icon);
                overlays[key] = overlay_object;
                overlay_index.push(key);
                map.addOverlay(overlay_object);
            }
            else
            {
                overlay_object = overlays[key];
            }

            if(markers[i].getAttribute("c"))
            {
                overlay_object.count = markers[i].getAttribute("c");
            }
            else
            {
                overlay_object.count = null;
                overlay_object.image = markers[i].getAttribute("i");
                overlay_object.type_string = markers[i].getAttribute("t");
                overlay_object.ml = markers[i].getAttribute("ml");
                overlay_object.address = markers[i].getAttribute("a");
                overlay_object.city = markers[i].getAttribute("ct");
                overlay_object.zip = markers[i].getAttribute("z");
                overlay_object.price = markers[i].getAttribute("p");
                overlay_object.bedrooms = markers[i].getAttribute("b");
                overlay_object.bathsfull = markers[i].getAttribute("bf");
                overlay_object.bathshalf = markers[i].getAttribute("bh");
                overlay_object.area = markers[i].getAttribute("sf");
                overlay_object.condition = markers[i].getAttribute("co");
            }
        }


        for(var i=0; i<overlay_index.length; ++i)
        {
            if(overlay_index[i])
            {
                if(updated_points[overlay_index[i]] == undefined)
                {
                    map.removeOverlay(overlays[overlay_index[i]]);
                    delete overlays[overlay_index[i]];
                    delete overlay_index[i];
                }
            }
        }
    });
}
