var map;
var stores;
var markers = new Array();

function init_map() {
    var edmonton = new google.maps.LatLng(53.53,-113.49);
    var mapOptions = {
      zoom: 10,
      center: edmonton,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    
    map = new google.maps.Map(document.getElementById("dealer_map"), mapOptions);
}
function plot_store(store) {
    var myLatlng = new google.maps.LatLng(store.lat,store.lng);
    var marker = new google.maps.Marker({
        position: myLatlng, 
        map: map,
        title: store.name
        });
    store.marker=marker;
    return marker;
}
//find bounds that fit an array of points
function findBounds(points) {
        var southWest=points[0];
        var northEast=points[0];
        //alert("Find bounds for "+points.length+" points")
        for (var i=0; i<points.length; i++) {
            point=points[i];
            if (point.lat()<southWest.lat()) {
                southWest=new google.maps.LatLng(point.lat(),southWest.lng());
            }
            if (point.lng()<southWest.lng()) {
                southWest=new google.maps.LatLng(southWest.lat(),point.lng());
            }
            if (point.lat()>northEast.lat()) {
                northEast=new google.maps.LatLng(point.lat(),northEast.lng());
            }
            if (point.lng()>northEast.lng()) {
                northEast=new google.maps.LatLng(northEast.lat(),point.lng());
            }            
        }
        return new google.maps.LatLngBounds(southWest, northEast);
        
}
function updateRegion() {
     $("#lstBrands").attr("selectedIndex", 0);
    var activeMarkers=new Array();    
    var r=$("#lstRegions").val();
    var mylatlng=map.getCenter();
    for (var i=0; i<stores.length; i++) {
        var s=stores[i].fields;
        if (s.city==r || r=="all") {
            s.marker.setVisible(true);
            $("#store_contact_"+stores[i].pk).show();
            mylatlng=s.marker.getPosition();
            activeMarkers.push(s.marker.getPosition());
        }
        else {
            s.marker.setVisible(false);
            $("#store_contact_"+stores[i].pk).hide();
        }
    }
    map.fitBounds(findBounds(activeMarkers));
     if (map.getZoom()>13) {
        map.setZoom(13);
    }
}
function updateBrand() {
    var activeMarkers=new Array();
    var r=$("#lstRegions").val();
    if (r!="Edmonton") {
        //Reset region to all unless it's already on Edmonton
        $("#lstRegions").attr("selectedIndex", 0);
        r="all"
    }
    
    var b=$("#lstBrands").val();
    var mylatlng=map.getCenter();
    for (var i=0; i<stores.length; i++) {
        var s=stores[i].fields;
        s.marker.setVisible(false);
        $("#store_contact_"+stores[i].pk).hide();
        for (var k=0; k<s.makes.length; k++) {
            if ((s.makes[k]==b || b=="all") && (s.city==r || r=="all")) {
                s.marker.setVisible(true);
                $("#store_contact_"+stores[i].pk).show();
                mylatlng=s.marker.getPosition();
                activeMarkers.push(s.marker.getPosition());
            }           
        }
    }
    map.fitBounds(findBounds(activeMarkers));
    if (map.getZoom()>13) {
        map.setZoom(13);
    }
}
function updateMap() {
    init_map();
            for (var i=0; i<stores.length; i++) {
                var m=plot_store(stores[i].fields);
                m.index_num=i;
                google.maps.event.addListener(m, 'click', function(data) {
                  // alert(stores[this.index_num].pk+" "+stores[this.index_num].fields.name);
                  var tmphtml=$("#store_contact_"+stores[this.index_num].pk).html();
                  $("#map_info_box").html(tmphtml);
                  $("#map_info_box >.uibutton").button();
                  
                });
               markers.push(m);
               //store_contact_
            }
            updateRegion();
}
$(document).ready(function() {
     
     $("#lstRegions").change(function() {
        updateRegion();
     });
      $("#lstBrands").change(function() {
        updateBrand();
     });
      
      $("#map_panel").hide();
      $("#btnShowMap").click(function() {
            $("#map_panel").slideDown();
            $("#points_panel").slideUp();
            $("#btnHideMap").show();
            $("#btnShowMap").hide();
            updateMap();
      })
      $("#btnHideMap").click(function() {
            $("#map_panel").slideUp();
            $("#points_panel").slideDown();
            $("#btnHideMap").hide();
            $("#btnShowMap").show();
      });
      updateMap();
});
