﻿


var map1;



        //Track view map
        function load(){
            
            GDownloadUrl("/loadTrackVars.aspx?trackid=" + trackid, process_it);
            GDownloadUrl("/loadTrackVars.aspx?userid=" + userid + "&waypoints=1", processWaypoints);
        }
        
        processWaypoints = function(doc){        
            setWaypoints(doc);
        }
        
        //map for catching coordinates
        function loadCoordCapture(trackid){
                map_item = document.getElementById("map1");
                map1 = new GMap2(map_item);
                map1.addControl(new GLargeMapControl());
                map1.addControl(new GMapTypeControl());    
                map1.addMapType(G_PHYSICAL_MAP);
                map1.enableDoubleClickZoom();
                 
            GDownloadUrl("/loadTrackVars.aspx?trackid=" + trackid, createMapForCoordCatch);                        
        }
        
        //load track photos
        function initTrackPhotos(){
            
            GDownloadUrl("/loadTrackVars.aspx?trackid=" + trackid + "&photos=1", setPhotosToTrack);
        }
        
        //load all public photos to a map
        function loadAllPublicPhotos(userId){
            map_item = document.getElementById("allPhotosMap");
            map1 = new GMap2(map_item);
                map1.addControl(new GLargeMapControl());
                map1.addControl(new GMapTypeControl());   
                   map1.addMapType(G_PHYSICAL_MAP); 
                map1.enableDoubleClickZoom();
                map1.setCenter(new GLatLng(60.400,25.300), 2);
                if(userId == null){
                    GDownloadUrl("/loadTrackVars.aspx?trackid=-1" + "&photos=all", setPhotosToTrack);
                }else{
                    GDownloadUrl("/loadTrackVars.aspx?trackid=-1" + "&photos=all&userId=" + userId, setPhotosToTrack);    
                }  
             
        }
        
        //load all tracks to a map
        function loadAllTracks(){
            GDownloadUrl("/loadTrackVars.aspx?AllTracks=1", process_it3);
        }
        //load all tracks to a map
        process_it3 = function(doc){        
            createMap2(doc,"allTracksMap");
        }
                
        
        //First points of tracks to a single map
        //loads users all tracks to a map
        var mapsUserId=-1;
         function loadTracksOnMap(userId){
         
            mapsUserId=userId;
            GDownloadUrl("/loadTrackVars.aspx?TracksOnMap=1&userId=" + userId, process_it2);
            GDownloadUrl("/loadTrackVars.aspx?userid=" + userId + "&waypoints=1", processWaypoints);
        }
        
        //Previewing map (for not registered users at the portal)
        function loadPreview(){
            
            createMap(document.getElementById("trackPoints").value);
        }
                     
         //single track view
         process_it = function(doc) {
          
            createMap(doc);
            
        }
        
        //All users tracks to a single map
         process_it2 = function(doc) {
          
            createMap2(doc,"map1");
            
        }
        
        
        
        
        //Track view map
        function createMap(doc){
        
                //Map default zoom level
        var zoomlevel = 12;
        //Track polyline width
        var linewidth = 4;
        
            var map_item = document.getElementById("map1");   
            
            if(map_item != null){
                map1 = new GMap2(map_item);
                map1.addControl(new GLargeMapControl());
                map1.addControl(new GMapTypeControl());    
                   map1.addMapType(G_PHYSICAL_MAP);
                map1.enableDoubleClickZoom();
               
                if (trackid > 0){
                    map1.setMapType(G_PHYSICAL_MAP);                        
                }
                
                                      
                lines = doc.split("|");
                var points = [];
                
                // Create our "tiny" marker icon
                    var startIcon = new GIcon(G_DEFAULT_ICON);
                    startIcon.image = "../images/icon_start.png";
                    startIcon.iconSize = new GSize(26, 34);
                    
                    var endIcon = new GIcon(G_DEFAULT_ICON);
                    endIcon.image = "../images/icon_stop.png";
                    endIcon.iconSize = new GSize(26, 34);

                    		
                    // Set up our GMarkerOptions object
                    markerOptionsStart = { icon:startIcon };
                     markerOptionsEnd = { icon:endIcon };
                    
                 // ==== It is necessary to make a setCenter call of some description before adding markers ====
                  // ==== At this point we dont know the real values ====
                  map1.setCenter(new GLatLng(0,0),0);
                
                               
                  // ===== Start with an empty GLatLngBounds object =====     
                 var bounds = new GLatLngBounds();
                
                for (var i=0; i<lines.length; i++) {
                    
                    if (lines[i].length > 1) {
                
                        parts = lines[i].split(",");
                        
                        var lat = parseFloat(parts[0]);
                        var lng = parseFloat(parts[1]);            
                        var point = new GLatLng(lat,lng);
                        
                       
                        
                        points[i] = point;
                        
                      // ==== Each time a point is found, extent the bounds ato include it =====
                      bounds.extend(point);
                        
                        if (i == 1) {
                            var piste = new GLatLng(lat,lng);
                            var neula = new GMarker(piste, markerOptionsStart);
                                               
                            map1.addOverlay(neula);
                       
                       
                        }

                        if (i == lines.length-1) {
                            var piste2 = new GLatLng(lat,lng);
                            var neula2 = new GMarker(piste2, markerOptionsEnd);
                            map1.addOverlay(neula2);
                          
                        }
    
                                             
                
                    }
                    
                                        
                }
               
             
                
            }
            
              // ===== determine the zoom level from the bounds =====
             map1.setZoom(map1.getBoundsZoomLevel(bounds)-1);

            // ===== determine the centre from the bounds ======
             map1.setCenter(bounds.getCenter());

             map1.addOverlay(new GPolyline(points,"#FF0000", linewidth));
             
               var overlayControl = new GOverviewMapControl(new GSize(140,140));
      map1.addControl(overlayControl);
      

            
            initTrackPhotos();


        }
        
        
        
        
        
        //Set waypoints to the map
        function setWaypoints(doc){                                                                             
        if(doc.length < 1){return;}                 
         
         var CamIcon = new GIcon(G_DEFAULT_ICON);
         CamIcon.image = "../images/icon_waypoint.png";
         CamIcon.iconSize = new GSize(24, 24);
         markerOptionsCam = { icon:CamIcon };
          CamIcon.iconAnchor = new GPoint(12, 24);
           CamIcon.shadowSize = new GSize(0, 0); 
         var piste;
         var html;
         var cam;   
         var allphotos;                                                    
                        
         var waypoints = doc.split("|");
         
         for (var i=0; i<waypoints.length; i++) {
            
            var vars = waypoints[i].split("@@@");
            
            var lat = vars[0];
            var lng = vars[1];
            var ele = vars[2];            
            var waypointID = vars[3];
            var name = vars[4];
            var time = vars[5];
            var modify = vars[6];
            var host = document.location.href.split("?")[0];
            html = "<b style='font-size:112%'>" + name + "</b><br>";                     
            html = html +  "<span class='track_totaltime'>" + time + "</span><br>";
            html = html + "<span class='track_location'><b>Lat.</b>: " + String(lat) + "</span><br>";
          html = html + "<span class='track_location'><b>Long.</b> " + String(lng) + " </span><br>";
           html = html + "<span class='track_location'><b>Elevation</b>: " + String(ele) + "</span><br>";
            html = html + "<div class='info_waypoint_info'></div>";
            html = html + "<a href='/TrackDownload.aspx?waypointId=" + waypointID + "' class='arrow_r'>Download Waypoint</a>";
            
            if(modify==1){
                html = html + "<a class='arrow_r' href='" + host + "?modifyWaypoints=" + waypointID + "'>Modify</a></span>";                      
            }
            
                                                
            piste = new GLatLng(lat,lng);

           
           
            cam = nuppineula(piste,'' + html +'',markerOptionsCam);
            
            
            map1.addOverlay(cam);            
            
         }                           
                
   }
        
    
   
  
   //function sets photos to a trackmap   
   var photoOverlays = new Array(); 
   var photoOverlayIDs = new Array(); 
   var photoOverlayTexts = new Array(); 
   function setPhotosToTrack(doc){
        
         if(doc.length < 10){return;}         
         
         var CamIcon = new GIcon(G_DEFAULT_ICON);
         CamIcon.image = "../images/icon_camera.png";
         CamIcon.iconSize = new GSize(16, 16);
         markerOptionsCam = { icon:CamIcon };
          CamIcon.iconAnchor = new GPoint(8, 16);
           CamIcon.shadowSize = new GSize(0, 0); 
         var piste;
         var html;
         var cam;   
         var allphotos;
                     
                               
                  // ===== Start with an empty GLatLngBounds object =====     
                 var bounds2 = new GLatLngBounds();    
                        
         var photos = doc.split("|");
         
         for (var i=0; i<photos.length; i++) {
            
            var vars = photos[i].split("@@@");
            
            var photoid = vars[0];            
            var name = vars[1];
            var desc = vars[2];
            var lat = vars[3];
            var lng = vars[4];
                        
            var trackname;
            var trackid;
            var sitename;
            
            if (vars.length > 5){
                trackname = vars[5];
                trackid = vars[6];
                sitename = vars[7]; 
                allphotos = 1;    
                
                html = "<a href='/photo.aspx?id=" + photoid + "' rel='lightbox[photos2]' onclick='myLightbox.start(this);return false;' title='" + 
                name + "' class='photo' style='background-image:url(/photo.aspx?id=" + photoid + "&thumb=1);'>" + 
                name + "</a><span class='info_photo_desc'>" + desc + "</span><br /><a href='/" + currentlanguage + "/" + sitename + "?trackId=" + trackid + "'><span class='info_photo_trackname'>" + trackname + "</span></a>";                      
            }else{
                html = "<a id=" + photoid + " href='/photo.aspx?id=" + photoid + "' rel='lightbox[photos2]' onclick='myLightbox.start(this);return false;' title='&nbsp;' class='photo' target='_blank' style='background-image:url(/photo.aspx?id=" + photoid + "&thumb=1);'>" + 
                name + "</a><span class='info_photo_desc'>" + desc + "</span>";                      
            }
                                    
            piste = new GLatLng(lat,lng);

           
           
            cam = nuppineula(piste,'' + html +'',markerOptionsCam);
            
            
             // ==== Each time a point is found, extent the bounds ato include it =====
                      bounds2.extend(piste);
             
             
            
            map1.addOverlay(cam);
            photoOverlays[i] = cam;
            photoOverlayIDs[i] = photoid;
            photoOverlayTexts[i] = html;
   
            
         }
         
         //Zoomataan kuvapisteiden  perusteella yhteisösivun kuvat kartalla osioon
         if (allphotos == 1)
         {
         var zoom = map1.getBoundsZoomLevel(bounds2)
             if (zoom > 12){
             zoom = 12
             }
             
               if (zoom > 3){
                       var overlayControl = new GOverviewMapControl(new GSize(140,140));
                          map1.addControl(overlayControl); 
                          }
         
            // ===== determine the zoom level from the bounds =====
             map1.setZoom(zoom);

            // ===== determine the centre from the bounds ======
             map1.setCenter(bounds2.getCenter());                            
          }  
          
                
   }
   
   //pops up the photo at the map
   function showPhotoAtMap(photoid){   
        for (i=0;i<photoOverlayIDs.length;i++)
            {
                if (photoOverlayIDs[i] == photoid){
                    photoOverlays[i].openInfoWindowHtml(photoOverlayTexts[i]);
                }
            }
   }
   

        
   //loads tracks to a map. näyttää kartalla ainoastaan ikonin aloituspisteiden kohdalla.
   //käytetään: käyttäjän kaikki reitit kartalla, kaikki järjestelmän reitit kartalla
   function createMap2(doc,mapItemName)
   {
                    //Map default zoom level
                    var zoomlevel = 5;                                 
                    var map = new GMap2(document.getElementById(mapItemName));
                    map1 = map;
                    map.addControl(new GLargeMapControl());
                    map.addControl(new GMapTypeControl());   
                    map.addMapType(G_PHYSICAL_MAP);
                    if (mapsUserId != -1){ //Viewing users album
                        map.setMapType(G_SATELLITE_MAP);                        
                    }
                    
                    
                    // ==== It is necessary to make a setCenter call of some description before adding markers ====
                  // ==== At this point we dont know the real values ====
                  map.setCenter(new GLatLng(0,0),0);
               
                               
                  // ===== Start with an empty GLatLngBounds object =====     
                 var bounds = new GLatLngBounds();                

                    lines = doc.split("|");
                   
                    var points = [];

                    for (var i=0; i<lines.length; i++) {
                    
                    
                        if (lines[i].length > 1) {
                
                           var parts = lines[i].split("@@@");
                            
                            var lat = parseFloat(parts[0]);
                            var lng = parseFloat(parts[1]);                                                      
                            var TrackID = parts[2]; 
                            var TrackName = parts[3]; 
                            var TrackLocation = parts[4];     
                            var TrackLength = parts[5];     
                            var TrackTotalTime = parts[6];  
                            var TrackCat = parseFloat(parts[7]);   
                              
                         
                             
                             if (TrackName == "") 
                             {
                             TrackName = "Reitti / Track"
                             }                                                           
                           

                            var CatIcon = new GIcon(G_DEFAULT_ICON);
                            CatIcon.image = "../images/icon_start.png";
                            CatIcon.iconSize = new GSize(26, 34);
                                                   // Set up our GMarkerOptions object
                            markerOptionsCat = { icon:CatIcon };
                                                   
                            var piste = new GLatLng(lat,lng);
                            
                            if (parts.length > 8)
                            {
                            var sitename = parts[8]; 
                             var html = "<a href='/" + currentlanguage + "/" + sitename + "?trackId=" + TrackID + "' class='title_link'>"+ TrackName +"</a><br><span class='track_location'>"+ TrackLocation +"</span><br><span class='track_length'>"+ TrackLength +" km</span><br><span class='track_totaltime'>"+ TrackTotalTime +"</span> <a href='/TrackDownload.aspx?TrackId=" + TrackID + "' class='arrow_r'>Download Track</a>";

                            
                            }else{
                          
                            var html = "<a href='?trackId=" + TrackID + "' class='title_link'>"+ TrackName +"</a><br><span class='track_location'>"+ TrackLocation +"</span><br><span class='track_length'>"+ TrackLength +" km</span><br><span class='track_totaltime'>"+ TrackTotalTime +"</span> <a href='/TrackDownload.aspx?TrackId=" + TrackID + "' class='arrow_r'>Download Track</a>";

                            }
                            var neula = nuppineula(piste,'' + html +'',markerOptionsCat);
                            
                             // ==== Each time a point is found, extent the bounds ato include it =====
                            bounds.extend(piste);

                         
                            map.addOverlay(neula);
                        }
                        
                       
                    }
                    
                var zoom = map.getBoundsZoomLevel(bounds)
              
                     if (zoom > 12){
                     zoom = 12
                     }
                     
                       if (zoom > 3){
                       var overlayControl = new GOverviewMapControl(new GSize(140,140));
                          map.addControl(overlayControl); 
                          }
         
            // ===== determine the zoom level from the bounds if at users album. Othervise set to "world map" =====
                if (mapsUserId != -1){ //Viewing users album                     
                        map.setZoom(zoom);                        
                    }else{
                        map.setZoom(1);     
                }
             

                            // ===== determine the centre from the bounds ======
                             map.setCenter(bounds.getCenter());    


}

function nuppineula(piste, teksti, ikoni){
    var neula = new GMarker(piste, ikoni);
    GEvent.addListener(neula, "mouseover", function(){
    neula.openInfoWindowHtml(teksti);
    });
    return neula;
};   

function createListMaps(vars){    
   
    var i = 0;
   
    for(i=1;i<vars.length;i++){
        var params = vars[i].split("|");        
        var map_item = document.getElementById("map_" + params[0]);                           
            
        if(map_item != null){
            var map = new GMap2(map_item);
            //map.disableDragging();            
                 map.enableDoubleClickZoom();      
            var startIcon = new GIcon(G_DEFAULT_ICON);
              startIcon.image = "../images/icon_start.png";
                startIcon.iconSize = new GSize(26, 34);
            
            markerOptionsStart = { icon:startIcon };
             
            
             var zoomlevel = 4;                                                                             
            var lat = parseFloat(params[1]);
            var lng = parseFloat(params[2]);  
                
                                              
            if (isNaN(lat)){                   
           
                lat = "54.7753";
                lng = "4.9219";
                zoomlevel = 1;
                startIcon.image = "../images/icon_alert_24.png";
                startIcon.iconSize = new GSize(24, 24);
                startIcon.shadow = "../images/blank.gif";
                
                  markerOptionsStart = { icon:startIcon,title:"Reitti virheellinen! Yritä uudelleen | Error in track! Please try again"};                                                        
               }  
               
            map.setCenter(new GLatLng(lat,lng), zoomlevel);                  
            var piste = new GLatLng(lat,lng);
            
            function nneula(piste, teksti, trID){
                var neula = new GMarker(piste, markerOptionsStart);
                GEvent.addListener(neula, "click", function(){
                    location.href="/?trackId=" + trID;
                });
                return neula;
            };
            
            var neula = nneula(piste,'KuuKuu',params[0]);
            //var neula = new GMarker(piste, markerOptionsStart);                                          
            map.addOverlay(neula);                                                                                                                 
                    
        }
       
    }
}

//Track view map
        function createMapForCoordCatch(doc){
                //Map default zoom level
        var zoomlevel = 5;
        //Track polyline width
        var linewidth = 4;
        var cam;
        
          // ==== It is necessary to make a setCenter call of some description before adding markers ====
                  // ==== At this point we dont know the real values ====
                  map1.setCenter(new GLatLng(0,0),0);
                
                               
                  // ===== Start with an empty GLatLngBounds object =====     
                 var bounds = new GLatLngBounds(); 
                                         
                lines = doc.split("|");
                var points = [];
                
                // Create our "tiny" marker icon
                 
                
                for (var i=0; i<lines.length; i++) {
                    
                    if (lines[i].length > 1) {
                
                        parts = lines[i].split(",");
                        
                        var lat = parseFloat(parts[0]);
                        var lng = parseFloat(parts[1]);            
                        var point = new GLatLng(lat,lng);
                        
                        points[i] = point;
                        
                         // ==== Each time a point is found, extent the bounds ato include it =====
                            bounds.extend(point);                                                  
                
                    }
                                                                            
            }                               
            
            var trackLine = map1.addOverlay(new GPolyline(points,"#FF0000", linewidth));
            
            GEvent.addListener(map1,"click",function(overlay,point) {    
                                
                if(orig_cam != null){
                    map1.removeOverlay(orig_cam);
                }
                                                           
                lat = parseFloat(point.lat()).toFixed(4);     
                lng = parseFloat(point.lng()).toFixed(4);
                lat_item.value = lat;
                lng_item.value = lng;
                                    
                var CamIcon = new GIcon(G_DEFAULT_ICON);
                CamIcon.image = "../images/icon_camera.png";
                CamIcon.iconSize = new GSize(24, 24);
                                       // Set up our GMarkerOptions object
                markerOptionsCam = { icon:CamIcon, draggable: true };
                                       
                var piste = new GLatLng(lat,lng);          
                
                if(cam != null){map1.removeOverlay(cam)};
                                                      
                cam = new GMarker(piste, markerOptionsCam);       
                GEvent.addListener(cam, "dragend", function() {
                                       
                    lat_item.value = cam.getPoint().lat().toFixed(4);
                    lng_item.value = cam.getPoint().lng().toFixed(4);
                    
                });               
                
                
                  
                
                map1.addOverlay(cam);
                    
            })  
            
             // ===== determine the zoom level from the bounds =====
                   map1.setZoom(map1.getBoundsZoomLevel(bounds));

                   // ===== determine the centre from the bounds ======
                 map1.setCenter(bounds.getCenter());                    
                        
         }
 
 
 var orig_cam;
 function setCamIcon(lat,lng){
         
         var CamIcon = new GIcon(G_DEFAULT_ICON);
         CamIcon.image = "../images/icon_camera.png";
         CamIcon.iconSize = new GSize(24, 24);
         markerOptionsCam = { icon:CamIcon, draggable: true };
         
         var piste;                                                                                                       
            
        piste = new GLatLng(lat,lng);           
        
        //map1.setCenter(piste);            
                                              
        orig_cam = new GMarker(piste, markerOptionsCam);                                                                               
        
        GEvent.addListener(orig_cam, "dragend", function() {
                                       
                    lat_item.value = orig_cam.getPoint().lat().toFixed(4);
                    lng_item.value = orig_cam.getPoint().lng().toFixed(4);
                    
                });       
        
        map1.addOverlay(orig_cam);            
         
    }
    
 
 function showAltitudeAtMap(alt,lat,lng)
   {
   var alt_point
   
    var AltIcon = new GIcon(G_DEFAULT_ICON);
         AltIcon.image = "../images/flag_red.png";
         AltIcon.iconSize = new GSize(16,16);
AltIcon.shadow = "../images/flag_red.png";
         AltIcon.shadowSize = new GSize(0, 0); 
         AltIcon.iconAnchor = new GPoint(9, 14);

         markerOptionsAlt = { icon:AltIcon, title:alt};
         
         var piste;                                                                                                       
            
        piste = new GLatLng(lat,lng);           
        
               
        alt_point = new GMarker(piste, markerOptionsAlt);                                                                               

        
        map1.addOverlay(alt_point); 

   }  
    
   