var dealer = false;
var dealers = {};
var map;
var markers = [];

$(function () {

  if (!document.getElementById("map")) return;

	var latlng = new google.maps.LatLng(60.21983, 15.18574);

  var mapOptions =
  {
    zoom: 5,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
    // disableDefaultUI: true,
    // navigationControl: true,
    // mapTypeControl: false,
    // scaleControl: false
  };

  map = new google.maps.Map(document.getElementById("map"), mapOptions);

  google.maps.event.addListener(map, 'click', function (e) {
    // console.log(e.latLng);
    // console.log(map.getCenter());
  });

  $.each(dealers, function (key, data) {
    addMarker(data, key);
  });

  if (dealer) addMarker(dealer, false);

  $("#map_links").find("a").click(function (e) {
  
    e.preventDefault();
  
    var center = false;
    var zoom = false;

    var location = $(this).attr("rel");
    switch (location)
    {
      // South
      case "6.1":
      	center = new google.maps.LatLng(57.79406, 14.44965);
        zoom = 6;
      break;
      // East
      case "6.2":
				center = new google.maps.LatLng(59.64185, 17.54780);
        zoom = 6;
      break;
      // North
      case "6.3":
				center = new google.maps.LatLng(61.29840, 14.31782);
        zoom = 6;
      break;
    }

    $("#dealer_list h2").text( $(this).text() );
    $("#dealer_list p").show();
    $("#dealer_list p").not(".dealer_partner").not("[rel='"+ location +"']").hide();

    map.setCenter(center);
    map.setZoom(zoom);
  });


  	$("#service_list").find("a").click(function () {
		removeMarkers();
		var service = $(this).attr("rel");
		$.each(dealers, function (key, data) {
			var services = data.services.split(", ");
			if (service == "all" || jQuery.inArray(service, services) != -1)
			{
				addMarker(data, key);
			}
		});
	});

});


function addMarker (data, key)
{
  if (!data.coordinates || data.coordinates == '')
  {
    var gc = new google.maps.Geocoder();
    gc.geocode( {'address': data.address +" "+ data.city }, function (results, status) {
      if (status == google.maps.GeocoderStatus.OK)
      {
        data.latlng = results[0].geometry.location;
        createMarker(data, key);
      }
      // else console.log(status);
    });
  }
  else
  {
    var coords = data.coordinates.split(",");
    data.latlng = new google.maps.LatLng(coords[0], coords[1]);
    createMarker(data, key);
  }
}

function createMarker (data, key)
{

  var markerImage = new google.maps.MarkerImage(
    '/files/Vianor2006/2009-images/map-vianor-icon-bubble.png',
    new google.maps.Size(56, 69),
    new google.maps.Point(0, 0),
    new google.maps.Point(6, 69)
  );

  var markerImage2 = '/files/Vianor2006/2009-images/icon.png';

  var marker = new google.maps.Marker({
    map: map,
    position: data.latlng,
    title: (data.name ? data.name : ''),
    icon: (key ? markerImage2 : markerImage),
    zIndex: (data.partner == 1 ? 1 : 10)
  });

  markers.push(marker);

  if (key)
  {
    var infowindow = new google.maps.InfoWindow({
      content:
        '<b><a href="/verkstad_info?myyntipiste='+ data.name +'">'+ data.name +'</a></b><br />'+
        data.address +'<br />'+
        data.zip +' '+ data.city +'<br />'+
        (data.tel ? '<br />Tel. '+ data.tel +'<br />' : '') +
        (data.open ? '<br />Öppettider:<br />'+ data.open +'<br />' : '') +
        '<a href="/verkstad_info?myyntipiste='+ data.name +'">Gå över till anläggningens hemsida</a></b><br />'+
        ''
    });

    google.maps.event.addListener(marker, 'click', function () {
      infowindow.open(map, marker);
    });
  }
  else
  {
    map.setCenter(data.latlng);
    map.setZoom(14);
  }
}

function removeMarkers ()
{
  if (!markers.length) return;
  $.each(markers, function (i, marker) {
    marker.setMap(null);
  });
}

/*
function getParameterByName (name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return decodeURIComponent(results[1].replace(/\+/g, " "));
}
*/
