var map;
var marker_array = new Array();
var my_marker;
var my_LatLng;
var icons = new Array();  
var friends = new Array();

var _SAVING_NOTIFICATION = "saving";

function load_map()
{
  if (GBrowserIsCompatible())
  {
    var baseIcon = new GIcon();
    baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
    baseIcon.iconSize = new GSize(20, 34);
    baseIcon.shadowSize = new GSize(37, 34);
    baseIcon.iconAnchor = new GPoint(9, 34);
    baseIcon.infoWindowAnchor = new GPoint(9, 2);
    baseIcon.infoShadowAnchor = new GPoint(18, 25);

    _ACTION_FRAME = document.getElementById("action_formID");
    
    var baseIcon = new GIcon();
    baseIcon.iconSize = new GSize(32,32);
    baseIcon.shadowSize = new GSize(56,32);
    baseIcon.iconAnchor = new GPoint(16,32);
    baseIcon.infoWindowAnchor = new GPoint(16,0);

    map = new GMap2(document.getElementById("map"));          
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.addControl(new GScaleControl ());          
    map.addControl(new GOverviewMapControl());
    
    if (show_myself == 1)
      map.setCenter(new GLatLng(my_geocord_x,my_geocord_y),my_geocord_z);  
    
    else
      map.setCenter(new GLatLng(50, 13), 5);
      
    var icon = new GIcon();
    icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
    icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    icon.iconSize = new GSize(12, 20);
    icon.shadowSize = new GSize(22, 20);
    icon.iconAnchor = new GPoint(6, 20);
  
    if (show_friends)
    {
      for (var i=0; i<friends.length; i++)
      {
        add_friend(friends[i].name,friends[i].icon);
        
        var option = document.createElement("option");
        var optionText = document.createTextNode(friends[i].title);
        option.setAttribute("value",friends[i].name);
        option.appendChild(optionText);
  
        document.getElementById("friends").appendChild(option)
      }
    }
    
    if (show_myself == 1)
      my_LatLng = new GLatLng(my_geocord_x,my_geocord_y);
    
    if (my_dragable)
    {
      my_marker = new GMarker(my_LatLng, {icon:icon, draggable: true});
      my_marker.enableDragging();
    }
    
    else
      my_marker = new GMarker(my_LatLng, {icon:icon, draggable: false});
      
    map.addOverlay(my_marker);
  }
}

function createMarker(friend,icon,dragable)
{
  var object = find_object_by_name(friends,friend.name);
  
  if (object.added)
  {
    map.setCenter(find_object_by_name(marker_array,object.name).getPoint(),11);  
    alert("Dieser Freund ist bereits auf deiner Karte!");
  }
  
  else
  {
    if (dragable)
    {
      var marker = new GMarker(friend.point, {title:friend.title, icon: icon, draggable: true});
      marker.enableDragging();
    }
    
    else
      var marker = new GMarker(friend.point, {title:friend.title, icon: icon});
      
    marker.name = friend.name;
    find_object_by_name(friends,friend.name).added = true;
    GEvent.addListener(marker, "click",
      function()
      {
        if (show_myself == 1)
        {
          var distance = marker.getPoint().distanceFrom(my_marker.getPoint())/1000;
          
          marker.openInfoWindowHtml(friend.info + "<br />Entfernung: " + distance.toFixed(2) + "km<br /><a href=\"javascript: remove_marker('" + friend.name + "')\">Freund/in von Karte entfernen</a>");
        }
        
        else
          marker.openInfoWindowHtml(friend.info + "<br /><a href=\"javascript: remove_marker('" + friend.name + "')\">Freund/in von Karte entfernen</a>");
      }
    );
    
    marker_array[marker_array.length] = marker;
    
    object.marker = marker;
    object.icon_id = icon.id;
    
    return marker;
  }
}
  
function remove_marker(name)
{
  for (i = 0; i < friends.length; i++)
  {
    if (friends[i].name)
    {
      if (friends[i].name == name)
      {
        find_object_by_name(friends,name).added = false;
        map.closeInfoWindow();
        map.removeOverlay(friends[i].marker);
      }
    }
  }
}
  
function add_friend(friend_name,icon_name)
{
  if (friend_name) 
  {    
    var new_marker = createMarker(find_object_by_name(friends,friend_name),find_object_by_name(icons,icon_name),false);

    if (new_marker)
      map.addOverlay(new_marker);
  }
}
  
function show_friend()
{
  var name = document.getElementById("friends").options[document.getElementById("friends").selectedIndex].value;

  var object = find_object_by_name(marker_array,name);
  
  if (object)
    map.setCenter(object.getPoint(), 11);
  
  else
    alert("Dieser Freund ist noch nicht auf deiner Karte!");
}
  
function show_me()
{
  map.setCenter(my_marker.getPoint(),11);  
}

function find_object_by_name(object,name)
{
  for(var i=0; i<object.length;i++)
  {
    if (object[i].name == name) 
      return object[i];
  }
  
  return false;
}
  
function save_it()
{  
  _ACTION_FRAME.my_coord_x.value = my_marker.getPoint().lat();
  _ACTION_FRAME.my_coord_y.value = my_marker.getPoint().lng();
  _ACTION_FRAME.my_coord_z.value = map.getZoom();
  
  _ACTION_FRAME.submit();
}
  
function addEvent( obj, type, fn )
{
  if (obj.addEventListener)
    obj.addEventListener( type, fn, false );
  
  else if (obj.attachEvent)
  {
    obj["e"+type+fn] = fn;
    obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
    obj.attachEvent( "on"+type, obj[type+fn] );
  }
}