/* -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */


var reserveCenters = {
    // Config
    MapId: 'nosc-map',  
   // DataUrl: '/locator/scripts/nosc-data.json',    
    // ReqUrl: '/contact-req.php',
  StatesXML: '/dms/navyreserve/xml/states.xml',
  MarkerIcons: '/dms/navyreserve/img/icons/nosc-markers.png',
  MarkerClusterIcons: '/dms/navyreserve/img/icons/nosc-markercluster.png',
  ZoomLevel: 3,  
    GMap: null,
  MarkerCluster: null,
  ClusterStyles: [],
  Markers: [],
  StateLatLngPts: [],  
    MaxBounds: null,
  loadDataCount: 0
}


reserveCenters.loadData = function(data) {    
            data = eval("(" + data + ')');
            
            var noscCount = 0;
            jQuery.each(data, function(i, nosc) {
                
                if (nosc.longitude != 0 && nosc.latitude != 0) {
                    reserveCenters.createMarker(nosc, noscCount);
                }                          

                noscCount = noscCount + 1;
                reserveCenters.loadDataCount = reserveCenters.loadDataCount + 1;
            });                
            var minLatLng = new google.maps.LatLng(reserveCenters.minLatLngArr[0],reserveCenters.minLatLngArr[1]);
            var maxLatLng = new google.maps.LatLng(reserveCenters.maxLatLngArr[0],reserveCenters.maxLatLngArr[1]);
            var maxBounds = new google.maps.LatLngBounds(minLatLng,maxLatLng);

            reserveCenters.MaxBounds = maxBounds;
                        
            reserveCenters.MarkerCluster.addMarkers(reserveCenters.Markers, false);
            reserveCenters.GMap.fitBounds(reserveCenters.MaxBounds);                       
  
}
reserveCenters.loadMap = function() {
    var mapCenter = new google.maps.LatLng(44.55377899929657, -113.28435);
    
  var mapOptions = {
      zoom: reserveCenters.ZoomLevel,
      center: mapCenter,
      scrollwheel: false,
      mapTypeId: google.maps.MapTypeId.TERRAIN    // ROADMAP SATELLITE HYBRID TERRAIN    
  };
    reserveCenters.GMap = new google.maps.Map(document.getElementById(reserveCenters.MapId), mapOptions);
    
    reserveCenters.minLatLngArr = [0,0];
    reserveCenters.maxLatLngArr = [0,0];
    
    reserveCenters.loadClusterStyles();
    reserveCenters.MarkerCluster = new MarkerClusterer(reserveCenters.GMap, null, { 'styles': reserveCenters.ClusterStyles });
    
    reserveCenters.loadData(data);
    reserveCenters.loadStateLatLng();          
}

reserveCenters.createMarker = function(nosc, idx) {    
    var latitude = parseFloat( nosc.latitude );
  var longitude = parseFloat( nosc.longitude );
  var location = new google.maps.LatLng( latitude, longitude );    
    
    var markerIcon = new google.maps.MarkerImage(reserveCenters.MarkerIcons,
        new google.maps.Size(39.0, 47.0),
        new google.maps.Point(0, 47.0), // NOTE: military entrance testing site is 0,0
        new google.maps.Point(19.0, 23.0)
    );
    var markerShadow = new google.maps.MarkerImage(reserveCenters.MarkerIcons,
        new google.maps.Size(71.0, 47.0),
        new google.maps.Point(39.0, 0),
        new google.maps.Point(19.0, 23.0)
    );

    var marker = new google.maps.Marker({
        // map: reserveCenters.GMap
        position: location, 
        title: nosc.name,
        icon: markerIcon,
        shadow: markerShadow
    });
    
    var markerContent = '<b>' + nosc.name + '</b>';
    markerContent += '<p>' + nosc.street_address;
    if(nosc.street_address != ""){
         markerContent += '<br /> ';
    }  
     markerContent += nosc.city + ' ' 
                           + nosc.state + ' ' 
                           + nosc.zip + '</p>';
    reserveCenters.createInfoWindow(marker, markerContent);

    if(nosc.name.indexOf("Guam")==-1){
        //Get min and max long/lats
              reserveCenters.minLatLngArr[0] = (latitude < reserveCenters.minLatLngArr[0] || idx == 0) ? latitude : reserveCenters.minLatLngArr[0];
              reserveCenters.minLatLngArr[1] = (longitude < reserveCenters.minLatLngArr[1] || idx == 0) ? longitude : reserveCenters.minLatLngArr[1];
              reserveCenters.maxLatLngArr[0] = (latitude > reserveCenters.maxLatLngArr[0] || idx == 0) ? latitude : reserveCenters.maxLatLngArr[0];
              reserveCenters.maxLatLngArr[1] = (longitude > reserveCenters.maxLatLngArr[1] || idx == 0) ? longitude : reserveCenters.maxLatLngArr[1];
        }
    
    reserveCenters.Markers.push(marker);
}
reserveCenters.createInfoWindow = function(marker, windowContent) {
    var infowindow = new google.maps.InfoWindow({ content: windowContent });
    google.maps.event.addListener(marker, 'click', function() {
        infowindow.open(reserveCenters.GMap, marker);
    });
}
reserveCenters.loadClusterStyles = function() {
    this.ClusterStyles.push({
        url: reserveCenters.MarkerClusterIcons,
        height: 40,
        width: 107,
        textColor: '#FFFFFF',
        textSize: 22
    });
}
reserveCenters.filterByState = function(state) {    
    if (state == "All States") {
        this.GMap.fitBounds(this.MaxBounds);
        return;
    }
    var latlng = this.StateLatLngPts[state];         
    var latlngbounds = new google.maps.LatLngBounds();
    for ( var i = 0; i < latlng.length; i++ ) {
        latlngbounds.extend( latlng[ i ] );
    }
    reserveCenters.GMap.fitBounds(latlngbounds);
}
reserveCenters.loadStateLatLng = function() {
  var stateLatLngPts = this.StateLatLngPts;

  jQuery.ajax({
        type: "GET",
      url: reserveCenters.StatesXML,
      dataType: "xml",
      success: function(xml) {
            jQuery('state', xml).each(function() {
                var stateName = jQuery(this).attr('name');
                var stateAbbr = jQuery(this).attr('usps_abbr');
                var points = jQuery('point', this);
                var pts = [];
                for (var i = 0; i < points.length; i++) {
                    pts[i] = new google.maps.LatLng( parseFloat(jQuery(points[i]).attr('lat')), parseFloat(jQuery(points[i]).attr('lng')) );                        
                }                   
                stateLatLngPts[stateAbbr] = pts;                    
            }); 
      }
    });
  this.StateLatLngPts = stateLatLngPts;  
}
reserveCenters.loadMapScript = function(callback) {
    var script = document.createElement("script");
    script.setAttribute("src", "http://maps.google.com/maps/api/js?sensor=false&callback="+callback);
    script.setAttribute("type", "text/javascript");
    document.documentElement.firstChild.appendChild(script);
}

