//////////////////////////////////////////////////////
//                   Map Events
//////////////////////////////////////////////////////

    function removeMarkerTypes(type_id){
      var markersArray = map.markers;
      for(var i=0;i<markersArray.length; i++)
      {
        if(markersArray[i].type_id && markersArray[i].type_id==type_id)
        {
          marker = markersArray[i];
          map.removeOverlay(marker);
          i--;
        }
      }    
    }

//--------------------------------------------------------------------

    function pointsLangChanged(){
      var selPointsLang = document.getElementById("selPointsLang");
      var points_lang = selPointsLang.options[selPointsLang.selectedIndex].value;
      setCookie("points_lang", points_lang);

      clearMarkers();
      loadMarkers();
    }
    
//--------------------------------------------------------------------

    function MarkerTypesChenged(chkMarkerType){
      /*
      if(typeof MaxCatAllow == "undefined") MaxCatAllow = 6;
      if(chkMarkerType.checked && getChkCatNum()>MaxCatAllow){
        chkMarkerType.checked = false;
      	alert(messages['MaxCatAllowMsg']+MaxCatAllow);
      	return;
      }
      */
      
      if(!chkMarkerType.checked){
        removeMarkerTypes(chkMarkerType.value);
        var stTypes = getMarkersType();
        setCookie("marker_types", stTypes);
        loadMarkers();
      }else{
        loadMarkers(chkMarkerType.value);
      }
    }

//--------------------------------------------------------------------

    function clearSelection(){
		var chkMarkerTypes = document.forms['myform'].chkMarkerTypes;
		for(var i=0;i<chkMarkerTypes.length;i++){
			chkMarkerTypes[i].checked = false;
		}
		clearMarkers();
        setCookie("marker_types", "");
    }

//--------------------------------------------------------------------

    function clearMarkers(){
      mrk_mgr.pending_markers = new Array();
      if(GuyMarker){
        guyMarkerLatlng = GuyMarker.getLatLng();
        map.clearOverlays();
        createGuyMarker(guyMarkerLatlng);
      }else{
        map.clearOverlays();
      }
    }

//--------------------------------------------------------------------

    function getMarkersType(){
      var chkMarkerTypes = document.forms['myform'].chkMarkerTypes;
      var stTypes = "";
      for(var i=0;i<chkMarkerTypes.length;i++){
        if(chkMarkerTypes[i].checked){
          stTypes += ((stTypes!="")?",":"") + chkMarkerTypes[i].value;
        }
      }
      return stTypes;
    }

//--------------------------------------------------------------------

    var lastLoadZoom = 0;
    var sw_view = "";
    var loadingMarkers = false;
    
    function loadMarkers(type_id){
    var url;
    var stTypes = "";
    
    if(typeof view_lang == "undefined") view_lang = "en";

    if(typeof type_id == "undefined"){
      stTypes = getMarkersType();
    }else{
      stTypes = type_id;
    }

    if(stTypes=="") return;
    
    var selPointsLang = document.getElementById("selPointsLang");
    var pl = ((typeof points_lang != "undefined")?points_lang:selPointsLang.options[selPointsLang.selectedIndex].value);
    var po = ((document.getElementById("txtPointOwner") && document.getElementById("txtPointOwner").value!="")?"&po="+document.getElementById("txtPointOwner").value:"");
    var c = ((typeof country!="undefined")?"&c="+country:"");

    if(map.getZoom()<=3){//country groups (0-3)
      //alert("country")
      if(sw_view!="c_groups" && sw_view!="") clearMarkers();
      sw_view = "c_groups"
      //url = "genxml3.php?"+getBoundPrm()+"&mt="+stTypes+"&points_lang="+pl;
      //GDownloadUrl(url, addCountryGroupMarkers);
      }
    else if(map.getZoom()<=15 && map.getZoom()<MaxZoom){//point groups (4-15)
      //alert("groups")
      if((sw_view!="p_groups" && sw_view!="") || map.getZoom()!=lastLoadZoom) clearMarkers();
      sw_view = "p_groups"
      url = "genxml2.php?"+getBoundPrm()+"&mt="+stTypes+"&points_lang="+pl+"&view_lang="+view_lang+"&z="+map.getZoom()+po+c;
      //window.open(url);
      GDownloadUrl(url, addPointGroupMarkers);
      }
    else{//(16+)
      //alert("points")
      if(sw_view!="points" && sw_view!="") clearMarkers();
      sw_view = "points"
      url = "genxml.php?"+getBoundPrm()+"&mt="+stTypes+"&points_lang="+pl+po+c;
      //window.open(url);
      GDownloadUrl(url, addMarkers);
      }
    lastLoadZoom = map.getZoom();
    }

//--------------------------------------------------------------------

    var GuyMarker = null;
    var guyMarkerLatlng = null;
    
    function createGuyMarker(latlng) {
      GuyMarker = new GMarker(latlng, {icon: guyIcon, draggable: true});

      GuyMarker.htmlTemplate = ""+
      "<table style=\"font-size: 14px; color: black\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">"+
      "<tr><td colspan=\"2\" align=\"center\"><u><b>"+messages['YouGuy']+"</b></u></td></tr>"+
      "<tr><td colspan=\"2\""+((view_lang=='he')?" dir=\"rtl\"":"")+">"+messages['YouGuyMsg']+"</td></tr>"+
      "<tr><td colspan=\"2\" align=\"center\"><br/><font size=\"2\"><b>lat:</b>@lat, <b>lng:</b>@lng</font></td></tr>"+
      "<tr><td align=\"left\"><font size=\"3\"><b><a href=\"javascript:go(@lat,@lng,map.getZoom()+1);\" style=\"color:blue\">"+messages['ZoomIn']+"</a></b>&nbsp;&nbsp;</font></td><td align=\"right\">&nbsp;&nbsp;<font size=\"3\"><b><a href=\"javascript:go(@lat,@lng,map.getZoom()-1)\" style=\"color:blue\">"+messages['ZoomOut']+"</a></b></font></td></tr>"+
      "</table>";


//--------------------------------------------------------------------

      GEvent.addListener(GuyMarker, 'click', function() {
        var latlng = GuyMarker.getLatLng();

        var marker = map.getMarkerByLatLng(latlng);
        if(marker){
          GEvent.trigger(marker,"click");
        }else{
          var myHtml = GuyMarker.htmlTemplate;
          myHtml = myHtml.replaceAll("@lat", latlng.lat());
          myHtml = myHtml.replaceAll("@lng", latlng.lng());

          GuyMarker.openInfoWindowHtml(myHtml);
        }
      });


//--------------------------------------------------------------------

      GEvent.addListener(GuyMarker, "dragstart", function() {
        map.closeInfoWindow();
        if(searchRadiusPolygon) map.removeOverlay(searchRadiusPolygon);
      });

/*
      GEvent.addListener(GuyMarker, "dragend", function() {
        var latlng = GuyMarker.getLatLng();
        guyMarkerLatlng = latlng;
        var myHtml = GuyMarker.htmlTemplate;
        myHtml = myHtml.replaceAll("@lat", latlng.lat());
        myHtml = myHtml.replaceAll("@lng", latlng.lng());

        GuyMarker.openInfoWindowHtml(myHtml);
      });
*/

      guyMarkerLatlng = latlng;

      map.addOverlay(GuyMarker);
    }

//--------------------------------------------------------------------

    /**
     * Add a circle to the global variable "map". This function won't work for circles that encompass
     * the North or South Pole. Also, there is a slight distortion in the upper-left, upper-right,
     * lower-left, and lower-right sections of the circle that worsens as it gets larger and/or closer
     * to a pole.
     * @param lat Latitude in degrees
     * @param lng Longitude in degrees
     * @param radius Radius of the circle in statute miles
     * @param {String} strokeColor Color of the circle outline in HTML hex style, e.g. "#FF0000"
     * @param strokeWidth Width of the circle outline in pixels
     * @param strokeOpacity Opacity of the circle outline between 0.0 and 1.0
     * @param {String} fillColor Color of the inside of the circle in HTML hex style, e.g. "#FF0000"
     * @param fillOpacity Opacity of the inside of the circle between 0.0 and 1.0
     */
    function drawCircle(lat, lng, radius, strokeColor, strokeWidth, strokeOpacity, fillColor, fillOpacity) {
      var d2r = Math.PI/180;
      var r2d = 180/Math.PI;
      var Clat = radius * 0.014483;  // Convert statute miles into degrees latitude
      var Clng = Clat/Math.cos(lat*d2r); 
      var Cpoints = []; 
      for (var i=0; i < 33; i++) { 
        var theta = Math.PI * (i/16); 
        Cy = lat + (Clat * Math.sin(theta)); 
        Cx = lng + (Clng * Math.cos(theta)); 
        var P = new GPoint(Cx,Cy); 
        Cpoints.push(P); 
      }

      var polygon = new GPolygon(Cpoints, strokeColor, strokeWidth, strokeOpacity, fillColor, fillOpacity);
      map.addOverlay(polygon);
      return polygon;
     }

//--------------------------------------------------------------------

    function mailPointKey(id, admn){
        if(!confirm(messages['AskMailPointToOwner'])) return;
        if(typeof view_lang == "undefined") view_lang = "en";
        if(!admn){
        	admn = "";
        }else{
        	admn = "&admn=1";
        }
        var url = "mail_point_key.php?id="+id+"&view_lang="+view_lang+admn;
        GDownloadUrl(url, function(){alert(messages['MailPointKey'])});
    }

//--------------------------------------------------------------------

    // Creates a marker at the given point
    function createMarker(latlng, myHtml) {
      var marker = new GMarker(latlng, {draggable: true});

      GEvent.addListener(marker, "dragstart", function() {
        map.closeInfoWindow();
      });

      GEvent.addListener(marker, "dragend", function() {
        var latlng = marker.getLatLng();

        //search country by coord
        geocoder.getLocations(latlng.lat()+","+latlng.lng(), function (result){
               var myHtml = marker.htmlTemplate.replace("@lat",latlng.lat());
               myHtml = myHtml.replace("@lng",latlng.lng());

               if (result.Status.code == G_GEO_SUCCESS && result.Placemark.length>0){
                 myHtml = myHtml.replace("@country",result.Placemark[0].address);
               }else{
                 myHtml = myHtml.replace("&c=@country","");
               }
               marker.openInfoWindowHtml(myHtml);
           })
      });

      GEvent.addListener(marker,"click", function() {
        var latlng = marker.getLatLng();

        //search country by coord
        geocoder.getLocations(latlng.lat()+","+latlng.lng(), function (result){
               var myHtml = marker.htmlTemplate.replace("@lat",latlng.lat());
               myHtml = myHtml.replace("@lng",latlng.lng());

               if (result.Status.code == G_GEO_SUCCESS && result.Placemark.length>0){
                 myHtml = myHtml.replace("@country",result.Placemark[0].address);
               }else{
                 myHtml = myHtml.replace("&c=@country","");
               }
               marker.openInfoWindowHtml(myHtml);
           })
      });

      return marker;
  }

//--------------------------------------------------------------------

    function add_point(type_id) {
      if(map.getCurrentMapType().getName()=="Map" || map.getCurrentMapType().getName()=="Terrain"){
        alert(messages['ChangeMapType']);
        return;
      }

      if(typeof view_lang == "undefined") view_lang = "en";
      
      if(!type_id) type_id = 1;
      var mapElem = document.getElementById("map");
      if(mapElem.className=="edit") return;
      
      mapElem.className = "edit";
      var mapClickEventListener = GEvent.addListener(map,"click", function(overlay,latlng) {
           if(latlng){

			if(map.getZoom()<13){
				alert(messages['TooFar']);
				map.setCenter(latlng, 13);
				//GEvent.removeListener(mapClickEventListener);
				//mapElem.className = "view";
				return;
			}
           
             //search country by coord
             geocoder.getLocations(latlng.lat()+","+latlng.lng(), function (result){
                     var selPointsLang = document.getElementById("selPointsLang");
                     var points_lang = selPointsLang.options[selPointsLang.selectedIndex].value;

                     var htmlTemplate = "<div"+((view_lang=='he')?" dir=\"rtl\"":"align=\"left\"")+">"+
                     "<u><b>"+messages['AddNewPoint']+":</b></u><br>"+
                     messages['ToAddNewPointClick']+" <a href=\"add_point.php?lat=@lat&lng=@lng&c=@country&pl="+points_lang+"&ti="+type_id+"&vl="+view_lang+"\">"+messages['here']+"</a><br>"+
                     messages['ToFixDragMarker']+"</div>";

                     var myHtml = htmlTemplate.replace("@lat",latlng.lat());
                     myHtml = myHtml.replace("@lng",latlng.lng());

                     if (result.Status.code == G_GEO_SUCCESS && result.Placemark.length>0){
                       myHtml = myHtml.replace("@country",escape(result.Placemark[0].AddressDetails.Country.CountryNameCode));
                     }else{
                       myHtml = myHtml.replace("&c=@country","");
                     }

                     var marker = createMarker(latlng, myHtml);
                     marker.htmlTemplate = htmlTemplate;
                     map.addOverlay(marker);
                     marker.openInfoWindowHtml(myHtml);
                     GEvent.removeListener(mapClickEventListener);
                     mapElem.className = "view";
                 })
             }
         });
   }

//--------------------------------------------------------------------

