﻿// JScript File

var MapHelper = [];

MapHelper.addRoute = function(map, route)
{
    var sroute = map.createRoute(route);
    var added;
    if (sroute.getType() === TrackMe.Mapping.SLap.getName()) 
    {
      added = map.addRoute(sroute);
      map.drawLap(sroute, 0, sroute.getEndTime());
    } 
    else 
    {
      added = map.addRoute(sroute);
      map.drawRoute(sroute, route.c, route.w);
    }
    
    sroute.numberLayersPresentIn = 1;
    if (!added) {
      var d = map.findRouteById(route.id);
      d.numberLayersPresentIn = d.numberLayersPresentIn + 1;
    }
}

MapHelper.addPoi = function(map, poi)
{
    var points = poi.pts;
    var pic = null;

    var latlngs = [];
    for(var p in points)
    {
        Array.add(latlngs, new TrackMe.Mapping.SLatLng(points[p].lt, points[p].lg));
    }
        
    if (latlngs.length == 1) 
    {
        if (poi.dtt == null && poi.dtd == null) 
        {
            pic = new TrackMe.Mapping.SPoint(poi.id, latlngs[0], map.createIcon(poi.id, poi.iu, poi.it));
        } 
        else 
        {
            pic = new TrackMe.Mapping.SDetailPoint(poi.id, latlngs[0], poi.dtt, poi.dtd, map.createIcon(poi.id, poi.iu, poi.it));
        }
        //map.addPoint(pic);
    } 
    else 
    {
        route = new TrackMe.Mapping.SRoute(poi.id, latlngs);
        route.setOwnerMap(this);
        route.numberLayersPresentIn = 1;
        if (!map.addRoute(route)) {
          var d = map.findRouteById(poi.id);
          d.numberLayersPresentIn = d.numberLayersPresentIn + 1;
        }
        map.drawRoute(route, poi.c, poi.w);

        if (poi.iu != null && poi.iu.length > 0) 
        {
            pic = new TrackMe.Mapping.SPoint(poi.id, new TrackMe.Mapping.SLatLng(poi.ipt.lt, poi.ipt.lg), map.createIcon(poi.id, poi.iu, poi.it));
            //map.addPoint(pic);
        }
    }
    
    if(pic)
    {
        pic.numberLayersPresentIn = 1;
        if (!map.addPoint(pic)) 
        {
            var d = map.findPointById(poi.id);
            d.numberLayersPresentIn = d.numberLayersPresentIn + 1;
        }
    }
}

MapHelper.addDoer = function(map, doer)
{
    if(doer.pt != null)
    {
        var opts = {};
        if(doer.ic)
        {
            opts.iconUrl = doer.ic.ImageUrl;
        }
        var sLatLng = null;
        if(doer.pt)
        {
            sLatLng = new TrackMe.Mapping.SLatLng(doer.pt.lt, doer.pt.lg);
        }
        doerPoint = new TrackMe.Mapping.SDoerPoint(doer.nn, sLatLng, opts);
        doerPoint.numberLayersPresentIn = 1;
        if (doer.ext != null) 
        {
            doerPoint.ext = doer.ext;
        }
        
        if (!map.addDoer(doerPoint)) {
          // already exists
          var d = map.findDoerById(doer.nn);
          d.numberLayersPresentIn = d.numberLayersPresentIn + 1;
        }
    }
}

MapHelper.removeDoer = function(map, doer) {
  if (doer.numberLayersPresentIn === 1) {
    map.removeDoerById(doer.getId());
  } else {
    doer.numberLayersPresentIn = doer.numberLayersPresentIn - 1;
  }
}

MapHelper.removePoi = function(map, poi) {
  if (poi == null) {
    return;
  }
  if (poi.numberLayersPresentIn === 1) {
    map.removePointById(poi.getId());
  } else {
    poi.numberLayersPresentIn = poi.numberLayersPresentIn - 1;
  }
}

MapHelper.removeRoute = function(map, route) {
  if (route.numberLayersPresentIn === 1) {
    map.removeRouteById(route.getId());
  } else {
    route.numberLayersPresentIn = route.numberLayersPresentIn - 1;
  }
}

MapHelper.updateDoer = function(map, doerId, newDoer)
{
    var doer = map.findDoerById(doerId);
    if(doer && newDoer.pt)
    {
        var newLatLng = new TrackMe.Mapping.SLatLng(newDoer.pt.lt, newDoer.pt.lg);
        doer.setLatLng(newLatLng);
    }
}

MapHelper.autoZoom = function(map)
{
    var allPoints = [];
    
    var routes = map.getRoutes();
    for(var r=0; r < routes.length; r++)
    {
        var route = routes.getItem(routes.keys[r]);
        allPoints = allPoints.concat(route.getPoints());
    }
    
    var points = map.getPoints();
    for(var p=0; p < points.length; p++)
    {
        var point = points.getItem(points.keys[p]);
        allPoints.push(point.getLatLng());
    }
    
    var photos = map.getPhotos();
    for(var p=0; p < photos.length; p++)
    {
        var photo = photos.getItem(photos.keys[p]);
        allPoints.push(photo.getLatLng());
    }
    
    var doers = map.getDoers();
    for(var d=0; d < photos.length; d++)
    {
        var doer = doers.getItem(photos.keys[p]);
        allPoints.push(doer.getLatLng());
    }

    if(allPoints.length > 0)
    {
        map.focusView(allPoints);
    }
}
