var map;
var marker = [];
var display_marker = [];
var min_zoom = [];
var current_content_hash = "";
var current_sub_content_hash = "";

function add_marker_listener (marker,poi_id) {
  google.maps.event.addListener(marker, 'click', function() {
    location.hash = "/poi/" + poi_id;
    show_content_window();
  });
}

function update_bounds_and_center () {
  var zoomL = map.getZoom();
  var bounds = map.getBounds();
  var southWest = bounds.getSouthWest();
  var northEast = bounds.getNorthEast();
  var minlat = southWest.lat();
  var minlng = southWest.lng();
  var maxlat = northEast.lat();
  var maxlng = northEast.lng();
  var lat = map.getCenter().lat();
  var lng = map.getCenter().lng();
  var i;

  $.get ('/api/poi_list/', { lat: lat, lng: lng, min_lat: minlat, min_lng: minlng, max_lat: maxlat, max_lng: maxlng, zoom_level: zoomL }, function(data) {
    if (data.city) {
      if (data.district) {
        $('#location').html(data.district + ', ' + data.city); 
      }
      else {
        $('#location').html(data.city);
      }
    }
    else {
      $('#location').html('');
    }
    for (i in data.poi) {
      j=data.poi[i].id;
      if (!marker[j]) {
        location_txt = data.poi[i].location;
        loc = $.parseJSON(location_txt);
        min_zoom[j] = data.poi[i].min_zoom;
        if (zoomL >= min_zoom[j]) {
          if (zoomL < 13) {
            zoomL=13;
          }
          marker[j] = new google.maps.Marker({position: new google.maps.LatLng(loc.coordinates[1], loc.coordinates[0]), map: map, icon: 'http://media.citibuzz.com/icons/' + zoomL + '/' + data.poi[i].icon});
          add_marker_listener(marker[j],j);
          memory_count=data.poi[i].memory_count;
          if ((memory_count) && (zoomL > 13)) { 
            marker[j].setAnimation(google.maps.Animation.BOUNCE);
          }
        }
      }
    }
  $('#ajax_loader').hide();
  },"json");
}

function initialize() {
  var myLatLng = new google.maps.LatLng(38.96367826283, 34.24332200000);
  var myOptions = {
    center: myLatLng,
    zoom: 6,
    disableDefaultUI: true,
    panControl: false,
    zoomControl: true,
    zoomControlOptions: {
      position: google.maps.ControlPosition.RIGHT_TOP
    },
    mapTypeControl: true,
    scaleControl: false,
    streetViewControl: false,
    overviewMapControl: false,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

  rightclickmenu = new google.maps.InfoWindow({
    maxWidth: 50
  });

  google.maps.event.addListener(map, 'rightclick', function(event) {
    var latLng = event.latLng;
    var lat = latLng.lat();
    var lng = latLng.lng();
    var zoomLevel = map.getZoom();
    var content= "<div id='rightclickmenu' style='line-height: 1.5em;'>" +
                 "<table>" + 
                 "<tr><td><a href='#" + create_poi_url + "?lat=" + lat + "&lng=" + lng + 
		 "&zoom=" + zoomLevel + "' onclick='rightclickmenu.close(); show_content_window();'>" + 
                 add_new_location + "</a></td></tr>" +
                 "</table>" +
                 "</div>";
    rightclickmenu.setPosition(latLng);
    rightclickmenu.setContent(content);
    rightclickmenu.open (map);
  });

  var match = null;
  var regex = new RegExp ('^http://media.citibuzz.com/icons/(.*?)/(.*)$','');
  var icon_name;
  var zoomLevel;

  google.maps.event.addListener(map, 'zoom_changed', function() {
    var i;
    var zoomLevel = map.getZoom();
    // Make sure in supported limits
    for (i in marker) {
      if (zoomLevel < min_zoom[i]) {
        marker[i].setMap(null);
      }
      else {
        if (zoomLevel > 20) {
          zoom_dir = 20;
        }
        else if (zoomLevel < 13) { 
          zoom_dir = 13;
        }
        else {
          zoom_dir = zoomLevel;
        }
        icon_name = marker[i].icon;
        if (match = regex.exec(icon_name)) {
          marker[i].setIcon('http://media.citibuzz.com/icons/' + zoom_dir + '/' + match[2]);
          marker[i].setMap(map);
        }
      }
    }
  });

  google.maps.event.addListener(map, 'idle', function() {
    // We don't want this to fire off too often
    // Let's keep it at zero for now
    update_bounds_and_center();
  });

  $(window).hashchange( function(){
    update_content_from_hash();
  });
// Init end
}

