
 // Extending GMarker
    
 GMarker.prototype.caveid = "";
 GMarker.prototype.cavename = "";
 GMarker.prototype.score = 0;
 GMarker.prototype.country = "";
 GMarker.prototype.bbe = -1;
 
 // Defining Globals  
 
 var clMap;
 var lastMarker;
 var iHoleCount = 0;
 var iCurrentBBE = -1;
 var clCurrentPoint;
 var strUpPath = "../../";
 var m_iCurrentZoom;
 var m_clPointToUse;
 var m_strTargetGUID;


GMap2.prototype.hoverControls = function(opt_noCloseIw)
{
  var theMap = this;
  theMap.hideControls();
  GEvent.addListener(theMap, "mouseover", function()
  {
    theMap.showControls();
  });
  GEvent.addListener(theMap, "mouseout", function()
  {
    theMap.hideControls();
  });
  theMap.libraryCard = 19162;
}
GMap.prototype.hoverControls = GMap2.prototype.hoverControls;

 // Constructor
 // 
 // strMode: either "embedded" for reactors on cave-homepages
 //          or     "standalone" for the reactors homebase
 
 function GLoad2(fLatitude, fLongitude, iZoomLevel, strTargetGUID, strMode) 
 {
  m_strTargetGUID = strTargetGUID;
  clMap = new GMap2(document.getElementById("map"));
  clMap.addMapType(G_PHYSICAL_MAP);
	clMap.addControl(new GLargeMapControl());
	clMap.addControl(new GMapTypeControl());
  clMap.addControl(new GScaleControl(200));
  clMap.enableDoubleClickZoom();
  clMap.enableContinuousZoom();

  if (strMode != "embedded")   // When in embedded mode, scrollwheelzoom will not be enabled.
  {
    clMap.enableScrollWheelZoom();
  }

  clMap.getContainer().style.overflow="hidden";
  clMap.hoverControls(); 
  m_clPointToUse = new GLatLng(fLatitude,fLongitude);
  clMap.setCenter(m_clPointToUse, iZoomLevel, G_SATELLITE_MAP); 
  
  if ($.browser.msie == true)
  {
    $("#TooltipFooter").html("HINWEIS: SAFARI 4 INSTALLIEREN! SOFORT!");
  }
  m_iCurrentZoom = iZoomLevel;
  
		GEvent.addListener(clMap,"zoomend", function(iOldZoom, iNewZoom)
		{
  		m_iCurrentZoom = iNewZoom;
  		updateTrayBar();
		});

	GEvent.addListener(clMap,"mousemove", function(marker,point) 
  {
    
    if (clCurrentPoint == null)
    {
      m_clPointToUse = marker;
    }
    else
    {
      m_clPointToUse = clCurrentPoint;
    }
    
    updateTrayBar();
  });

  GEvent.addListener(clMap, 'extinfowindowclose', function()
  {
    // Infowindow close - reset icon
  
    if (lastMarker != null)
    {
      lastMarker.setImage(strUpPath+"images/markers/marker_"+Math.round((lastMarker.score/10))+".png");
      lastMarker = null;
    }
    
  }); 

  // Initiating coordinate download
  
  fetchNextBunch(0);

  } // Constructor End

  function updateTrayBar()
  {
    document.getElementById("LiveCoordinateZOOM").innerHTML = "ZOOM: "+m_iCurrentZoom;
    document.getElementById("LiveCoordinateLAT").innerHTML = "LAT: "+m_clPointToUse.lat().toString().substr(0,10);
    document.getElementById("LiveCoordinateLNG").innerHTML = "LNG: "+m_clPointToUse.lng().toString().substr(0,10);
  }
  // Segmented Coordiante Download
   
  function fetchNextBunch($iStartIndex)
  {
   $.ajax({
      type: "GET",
      url: strUpPath+"php/coordinatereactor2/coordinateprovider.php",
      data: "fetchCoordinates="+$iStartIndex,
      success: function(msg)
      {
   
        iCurrentBBE = $(msg).find('coordinatelist').attr('bbe');
		      var $bFound = false;
		
        $(msg).find('coordinate').each(function() 
        {
          var $clLoch = $(this);
          $bFound = true;
          iHoleCount++;

          // Creating new Marker

          var clMarker        = new GMarker(new GLatLng($clLoch.attr("longitude"),$clLoch.attr("latitude")));
          clMarker.caveid     = $clLoch.attr("id");
          clMarker.cavename   = $clLoch.attr("name");
          clMarker.score      = $clLoch.attr("score");
          clMarker.country    = $clLoch.attr("country");
          clMarker.bbe        = $clLoch.attr("bbe");
          
          // If there is a TargetGUID specified, we search all incoming coordinates or that
          // GUID. In case of a match, we center the map on the found cave.
          
          if ($clLoch.attr("guid") == m_strTargetGUID)
          {
            console.log("Target Loch:"+clMarker.cavename);
            
            m_clPointToUse = new GLatLng($clLoch.attr("longitude"),$clLoch.attr("latitude"));
            
            clMap.setCenter(m_clPointToUse, 13); 
          }
          
          // Creating Tooltip
          
          var clTooltip = new Tooltip(clMarker,$clLoch.attr("name"),4);
          clMarker.tooltip = clTooltip;
          clMap.addOverlay(clMarker);
          clMap.addOverlay(clTooltip);
          clMarker.setImage(strUpPath+"images/markers/marker_"+Math.round((clMarker.score/10))+".png");

          // Tooltip Handlers

          GEvent.addListener(clMarker,"mouseover", function()
          {
            this.tooltip.show();
            clCurrentPoint = this.getPoint();
            var strBBE;
            if (this.bbe == -1)
            {
              strBBE = "KEINE BBE ERFORDERLICH";
            }
            else
            {
              strBBE = "BBE"+this.bbe;
            }
            $("#TooltipFooter").html(this.country.toUpperCase()+" - "+this.cavename.toUpperCase()+ " - "+strBBE);
          });
      
          GEvent.addListener(clMarker,"mouseout", function()
          {
            document.getElementById("TooltipFooter").innerHTML = "";
            clCurrentPoint = null;
            this.tooltip.hide();
          });

          // Marker-Click-Handler
          
          GEvent.addListener(clMarker,"click",  function() 
          {
    			  var localMarker = this;
          	localMarker.tooltip.hide();
            $.ajax({
                type: "GET",
                url: strUpPath+"php/coordinatereactor2/coordinateprovider.php",
                data: "fetchCoordinateDetails="+this.caveid,
                success: function(msg)
                {
                  var $clDetails = $(msg).find('coordinatedetails');
                  var $strCaveLink = "http://"+$clDetails.attr("texturl");
                  var $strHTML = "<table class='text_mini' style='width: 100%'><tr>"+
                  "<td rowspan='3' style='width: 133px; height:100px'><a class='link_mini' href='"+$strCaveLink+"'><img width='133' height='99' src='http://"+$clDetails.attr("imageurl")+"' style='float:left; border:3px solid black;'/></a></td>"+
                  "<td style='vertical-align:top'><a class='link_mini' href='"+$strCaveLink+"'>"+$clDetails.attr("katasternr")+" "+localMarker.cavename+"</a></td>"+
                  "</tr><tr>"+
                  "<td style='vertical-align:middle'>"+$clDetails.attr("description")+"</td>"+
                  "</tr><tr>"+
                  "<td style='vertical-align:bottom'>"+"Länge: "+$clDetails.attr("lenght")+"m Punkte: "+$clDetails.attr("score")+ " Anspruch: "+$clDetails.attr("level")+"</td>"+
                  "</tr></table>";

                  // Resetting previously set marker-image
                  
                  if (lastMarker != null)
                  {
                    lastMarker.setImage(strUpPath+"images/markers/marker_"+Math.round((lastMarker.score/10))+".png");
                  }

                  // Opening Info Window
                  
                  localMarker.openExtInfoWindow(clMap, "extInfoWindow_coolBlues", "<div>"+$strHTML+"</div>", {beakOffset: 4}); 

                  // Setting "Arrow" icon, panning to selected point
                  
                  localMarker.setImage(strUpPath+"images/markers/ballon_marker.png");
                  lastMarker = localMarker;
                  clMap.panTo(localMarker.getPoint());

                }
              }); // ajax-coordinate-detail-provider
            }); // click listener
          }); // for each coordinate

          // Updating CaveCount / BBE
              
          var strZeros = "00000";
          var strHoleCount = strZeros.substring(0,5-(iHoleCount.toString().length))+iHoleCount;
          var strBBE;
          
          if (iCurrentBBE == -1)
          {
            strBBE = "GÄSTE";
          }
          else
          {
            strBBE = "BENUTZER MIT MBBE "+iCurrentBBE;
          }
          
          document.getElementById("ReactorHeadline").innerHTML = strHoleCount+ " KOORDINATEN VERFÜGBAR FÜR "+strBBE;
   
          // If there was at least one coordinate in last bunch, initiating next download - a kind of recursion
          
          if ($bFound == true)
          {
            fetchNextBunch($iStartIndex+9);
          }
    
      }   
    }); // fetch coordinate
  } // fetchNextBunch
