// 
//    	         Google Map Mod JavaScript
//
//                 author: 	(c) ixdude.com
//                    date: 	2007-11-06
//               website:	http://ixdude.com
//                version: 	2.3.2
//

//
//	 This program is free software; you can redistribute it and/or modify
//	 it under the terms of the GNU General Public License as published by
//	 the Free Software Foundation; either version 2 of the License, or
// 	 (at your option) any later version.
//

var adminsCount = 0;
var modsCount = 0;
var usersCount = 0;
var map = null;
var markersData_Name = new Array();
var markersData_From = new Array();
var markersData_Level = new Array();
var markersData_Posts = new Array();
var markersData_Colors = new Array();
var markersData_Avatar = new Array();
var markersData_Description = new Array();
var markersData_Seek = new Array();
var markersData_Id = new Array();
var DefinedMapTypes = new Array();
var myMapTypes = new Array();
var currentZoom = null;
var lastSelection = null;
var lastSelectionCoords = null;
var markersList = ''; 

function createMap( )
{
 DefinedMapTypes['Map'] = G_NORMAL_MAP;
 DefinedMapTypes['Satellite'] = G_SATELLITE_MAP;
 DefinedMapTypes['Hybrid'] = G_HYBRID_MAP;
 if (GBrowserIsCompatible())
 {
  map = new GMap2(document.getElementById("map"));
  if( mapControls == 'Large' )
  {
   map.addControl(new GLargeMapControl());
  }
  else if ( mapControls == 'Small' )
  {
   map.addControl(new GSmallMapControl());
  }
  else if ( mapControls == 'Compact' )
  {
   map.addControl(new GSmallZoomControl());
  }
  if( displayScale )
  {
   map.addControl(new GScaleControl());
  }
  if( showMiniMap )
  {
   map.addControl(new GOverviewMapControl());
  }

  map.setCenter(new GLatLng( startLat, startLng ), startZoom );
  map.setMapType( DefinedMapTypes[myMapType] );
  currentZoom = map.getZoom();

  document.getElementById("myZoom").value = currentZoom;
  if( mode == 'add' )
  {
   changeDisplay( 'float' );
   document.getElementById("submit").disabled = true;
   
   if( userDefined )
   {
    document.getElementById("submit").disabled = false;
    document.getElementById("xy").innerHTML = map.getCenter();
    lastSelection = new GMarker( map.getCenter() );
    map.addOverlay( lastSelection ); submitData( );
   }
  }
  else
  {
   submitData( );
  }
  
  // action taken after map moves
  GEvent.addListener(map, "moveend",function()
  {
   if( mode == 'add' )
   {
    return false;
   }
   submitData( );
  });
  
  // action taken after map click
  GEvent.addListener(map, "click", function(marker, point)
  {
   if( mode == 'add' )
   {
    if( lastSelection )
    {
     map.removeOverlay( lastSelection );
     document.getElementById("submit").disabled = true;
     document.getElementById("xy").innerHTML = l_none;
     if( !point )
     {
      return false;
     }
    }
    
    lastSelectionCoords = point;
    document.getElementById("submit").disabled = false;
    document.getElementById("xy").innerHTML = point;
    document.getElementById("myCoords").value = point;
    document.getElementById("myMapType").value = myMapType;

    lastSelection = new GMarker(point);
    map.addOverlay( lastSelection );
   }
   else
   {
    if( marker )
    {
     marker.openInfoWindowHtml( loadTextByCoords( marker.getPoint().lat(), marker.getPoint().lng(), 0 ) );
    }
   }
   return false;
  });

  // action taken after zoom in/out
  GEvent.addListener(map, "zoomend", function(oldLvl, newLvl)
  {
   currentZoom = newLvl;
   document.getElementById("myZoom").value = currentZoom;
  });

  // downloads markers
  GDownloadUrl( markersFile, function(data, responseCode)
  {
   var xml = GXml.parse(data);
   var markers = xml.documentElement.getElementsByTagName("marker");

   for (var i = 0; i < markers.length; i++)
   {
    var markerLat = parseFloat(markers[i].getAttribute("lat"));
    var markerLng = parseFloat(markers[i].getAttribute("lng"));
    var markerName = markers[i].getAttribute("name");
    var markerColor = markers[i].getAttribute("color");
    var markerFrom = markers[i].getAttribute("from");
    var markerAvatar = markers[i].getAttribute("avatar");
    var markerDescription = markers[i].getAttribute("description");
    var markerPosts = parseInt(markers[i].getAttribute("posts"));
    var markerLevel = parseInt(markers[i].getAttribute("level"));
    var markerId = markers[i].getAttribute("id");

    if( markerLevel == '1' )
    {
     adminsCount++;
    }
    if( markerLevel == '2' )
    {
     modsCount++;
    }
    if( markerLevel == '0' )
    {
     usersCount++;
    }

    var point = new GLatLng( markerLat, markerLng );
    var if_color = ( markerColor ) ? ' style="color:#' + markerColor + '" ' : '';

    markersList += ( ( i ) ? ', ' : '' ) +'<a href="javascript:void(0)" onclick="showBalloon( ' + markerLat + ', ' + markerLng + ', ' + ( markerId > 0 ? markerId : '\'' + markerId + '\'' ) + ' )" class="gensmall" ' + if_color + '>' + markerName + '</a>';

    markersData_Id[i] = markerId;
    markersData_Name[i] = markerName;
    markersData_From[i] = markerFrom;
    markersData_Level[i] = markerLevel;
    markersData_Colors[i] = markerColor;
    markersData_Posts[i] = markerPosts;
    markersData_Description[i] = markerDescription;
    markersData_Avatar[i] = markerAvatar;
    markersData_Seek[i] = markerLat + 'x' + markerLng;

    if( mode == 'view' )
    {

     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);

     var userIcon = new GIcon(baseIcon);
     userIcon.image = 'map_icons/marker' + markerLevel + '.png';
     var markerOptions = { icon:userIcon };

     var mapmarker = new GMarker(point, markerOptions);

     map.addOverlay(mapmarker);
    }

   }
   if( markersList )
   {
    document.getElementById('markersList').innerHTML = markersList;
    document.getElementById('adminsCount').innerHTML = adminsCount;
    document.getElementById('modsCount').innerHTML = modsCount;
    document.getElementById('usersCount').innerHTML = usersCount;
    
    if( jump_to_user )
    {
     showBalloon( startLat, startLng, show_user_id );
    }
    
   }
   
  });
  generateMapTypesForm( );
 }
}

function moveTo( x, y )
{
 map.panTo(new GLatLng(x, y));
 return true;
}

function submitData( )
{
 center = map.getCenter();
 document.getElementById("myCoords").value = center;
 document.getElementById("myZoom").value = currentZoom;
 document.getElementById("myMapType").value = myMapType;
}

function loadTextByCoords( lat, lng, uid )
{
 var markersData_Pointers = new Array();
 var markersData_text = '';
 j = 0;

 for( i = 0; i < markersData_Seek.length; i++ )
 {
  if( markersData_Seek[i] == lat + 'x' + lng && ( markersData_Id[i] == uid || uid === 0 ) )
  {
   markersData_Pointers[j] = i;
   j++;
  }
 }

 if( markersData_Avatar[markersData_Pointers[0]] != '' )
 {
    markersData_text +='<div style="float:left; text-align:right; vertical-align:middle"><img src="' + markersData_Avatar[markersData_Pointers[0]] + '" alt="' + markersData_Name[markersData_Pointers[0]] + '" border="0" style="padding-right: 4px;" /></div>';
 }

 if( markersData_Pointers.length == 1 )
 {
  if( markersData_Level[markersData_Pointers[0]] == '1' )
  {
   var this_user_rank = l_rank_admin;
  }
  else if ( markersData_Level[markersData_Pointers[0]] == '2' )
  {
   var this_user_rank = l_rank_mod;
  }
  else
  {
   var this_user_rank = l_rank_user;
  }

  var if_color = ( ( markersData_Colors[markersData_Pointers[0]] ) ? 'color:#' + markersData_Colors[markersData_Pointers[0]] + ';' : '' );

  if( markersData_Description[markersData_Pointers[0]] == '' )
  {

   lat = Math.round( lat * 1000 ) / 1000;
   lng = Math.round( lng * 1000 ) / 1000;

   markersData_text = '<a href="profile.php?mode=viewprofile&u=' + markersData_Id[markersData_Pointers[0]] + '" style="text-decoration: none;' + if_color + '" target="_blank"><b>' + markersData_Name[markersData_Pointers[0]] + '</b></a><hr /><br />' + markersData_text;

   markersData_text += '<div style="width:175px;white-space:nowrap; vertical-align:middle">';
   markersData_text += l_latitude + ': <span style="color:black">' + lat + '</span><br />';
   markersData_text += l_longtitude + ': <span style="color:black">' + lng + '</span><br />';
   markersData_text += l_rank + ': <span style="color:black">' + this_user_rank + '</span><br />';
   markersData_text += l_from + ': <span style="color:black">' + markersData_From[markersData_Pointers[0]] + '</span><br />';
  }
  else
  {
   markersData_text = '<b>' + markersData_Name[markersData_Pointers[0]] + '</b><hr /><br />' + markersData_text;
   markersData_text += markersData_Description[markersData_Pointers[0]];
  }
 }
 else if( markersData_Pointers.length > 1 )
 {
  markersData_text += replaceText( '%%', markersData_Pointers.length, l_users_found ) + ':<br />';
  for( i = 0; i < markersData_Pointers.length; i++ )
  {
   var j = markersData_Pointers[i];
   markersData_text += ( ( i ) ? ', ' : '' ) + '<a href="javascript:void(0)" onclick="showBalloon( ' + lat + ', ' + lng + ', ' + markersData_Id[j] + ' )" class="gensmall">' + markersData_Name[j] + '</a>';
  }

 }
 else
 {
  markersData_text += l_no_users + '<br />';
 }
 markersData_text += '</div>';
 return '<div style="color:#979797; width:285px">' + markersData_text + '</div><br style="clear:both"/>';
}

function showBalloon( x, y, uid )
{
 if( moveTo( x, y ) )
 {
  map.openInfoWindowHtml( new GLatLng(x, y), loadTextByCoords( x, y, uid ) );
 }
}

function generateMapTypesForm( )
{
 var innerHTML = '';
 var checked = new Array();
 var typeNames = new Array();

 typeNames[0] = map.getMapTypes()[0].getName();
 typeNames[1] = map.getMapTypes()[1].getName();
 typeNames[2] = map.getMapTypes()[2].getName();

 checked[0] = ( map.getMapTypes()[0].getName() == myMapType ) ? 'checked="checked"' : '';
 checked[1] = ( map.getMapTypes()[1].getName() == myMapType ) ? 'checked="checked"' : '';
 checked[2] = ( map.getMapTypes()[2].getName() == myMapType ) ? 'checked="checked"' : '';
 checked[3] = ( showMiniMap ) ? 'checked="checked"' : '';

 innerHTML += '<b>' + l_map_type + ':</b> &nbsp; ';
 innerHTML += '<label><input type="radio" name="maptype" value="' + typeNames[0] + '"' + checked[0] + ' onchange="if( this.checked ) changeMapType( \'' + typeNames[0] + '\' )" />' + l_normal_map + '</label> &nbsp; ';
 innerHTML += '<label><input type="radio" name="maptype" value="' + typeNames[1] + '"' + checked[1] + ' onchange="if( this.checked ) changeMapType( \'' + typeNames[1] + '\' )" />' + l_satellite_map + '</label> &nbsp; ';
 innerHTML += '<label><input type="radio" name="maptype" value="' + typeNames[2] + '"' + checked[2] + ' onchange="if( this.checked ) changeMapType( \'' + typeNames[2] + '\' )" />' + l_hybrid_map + '</label> &nbsp; ';
 innerHTML += '<label><input type="checkbox" name="minimap" value="1"' + checked[3] + ' /> ' + l_show_mini_map + '</label> &nbsp; '; innerHTML += ' &nbsp; <input type="submit" name="submitMyPreferences" value="' + l_save + '" />';

 document.getElementById('maptypesform').innerHTML = innerHTML;
}

function changeMapType( myMapType )
{
 map.setMapType( DefinedMapTypes[myMapType] );
}

function replaceText( look, replacement, text )
{
 return text.split(look).join(replacement);
}

function changeDisplay( ident )
{
 var objectDisplay = document.getElementById(ident);
 if( objectDisplay.style.display != 'block' )
 {
  objectDisplay.style.display = 'block';
 }
 else
 {
  objectDisplay.style.display = 'none';
 }
}

