﻿var color = new VEColor(255,0,0,1);
var width = 2;
var id = 'I';
          
var map = null;
var points=null;
var currentPosition=null;
var firstTime=true;
var frameIndex=0;
//Updater
var stop=false;
var poly;
var showRoute=false;
var lastGpsString;
var zoomLevel=13;
var abortUpdates=false;

function CreateMap()
{
    points=null;
    map = new VEMap('myMap');
    
    map.LoadMap();
    map.SetZoomLevel(0);
    map.SetMapMode(VEMapMode.Mode2D);
    
    //window.setTimeout("getNextGpsData()",1000);    
}
function onFeed1Load(layer)
{
    var numShapes = layer.GetShapeCount();
    for(var i=0; i < numShapes; ++i)
    {
        var s = layer.GetShapeByIndex(i);
        s.SetCustomIcon("nav_plain_red.png");
    }
}
function ClearMap()
{    
    map.DeleteAllShapes();
    firstTime=true;
    frameIndex=0;
    try
    {
        map.DeleteAllPolylines();
     }
     catch(e){}
}
function SetStartPoint(p1,p2)
{
    abortUpdates=false;
    startPoints=new VELatLong(parseFloat(p1),parseFloat(p2));
    spArray=new Array(
                    startPoints
                );
    pin = new VEShape(VEShapeType.Pushpin,startPoints);
    pin.SetTitle("Start Point");
    pin.SetDescription("Broadcast start point");
    pin.SetCustomIcon("nav_plain_green.png");
    map.AddShape(pin);
    map.SetCenter(startPoints);
    map.SetMapView(spArray);
    map.SetZoomLevel(7);     
}
//Handler function to process results from xml http object
function SetGpsPoints2(resp)
{
    
    try
    {
        lastGpsString=resp;
        frameIndex++;
        gpsData=resp.split(",");                 
        if(gpsData.length>3)
        {     
            
            if(firstTime)
            {
                
                firstTime=false;
                startPoints=new VELatLong(parseFloat(gpsData[0]),parseFloat(gpsData[1]));
                spArray=new Array(
                    startPoints
                );
                var pin = new VEShape(VEShapeType.Pushpin,startPoints);
                //pin.SetTitle("Start Point");
                //pin.SetDescription("Broadcast start point");
                pin.SetCustomIcon("nav_plain_green.png");
                map.AddShape(pin);
                map.SetMapView(spArray);
                //need to re-define mapStyle for embedding
                //map.SetMapStyle(mapStyle);
                
                map.SetZoomLevel(zoomLevel);                       
                return;    
            }
            if(currentPosition!=null)
            {
                map.DeleteShape(currentPosition);
            }
            
            currentLatLong=new VELatLong(parseFloat(gpsData[gpsData.length-2]),parseFloat(gpsData[gpsData.length-1]));
                             
           
            map.SetCenter(currentLatLong);
           
           if(showRoute)
           { 
               if(poly!=null)
               {          
                map.DeleteAllPolylines();
               }
                //alert(gpsData.length/2);
                points = new Array(gpsData.length/2);
                pindex=0;   
                for(i=0;i<gpsData.length;i+=2)
                {
                    //
                    if(i+1<gpsData.length)
                    {
                        //alert(gpsData[i]+" "+gpsData[i+1]);
                        points[pindex]=new VELatLong(parseFloat(gpsData[i]),parseFloat(gpsData[i+1]));
                        pindex++;
                    }
                }  
                //for(i=0;i<points.length;i++)
                //{
                //    alert(points[i]); 
                //}
                poly = new VEPolyline("lm"+frameIndex, points, color, width);   
                map.AddPolyline(poly);
                //alert("Poly added");
                //map.SetMapView(points);
                
                
                //map.SetCenter(points[points.length-1]);
               
            }
            else
            {
                currentPosition=new VEShape(VEShapeType.Pushpin, currentLatLong);
                
                //currentPosition.SetTitle("Current location");                        
                currentPosition.SetCustomIcon("nav_plain_blue.png");
                map.AddShape(currentPosition);   
            }
           
        }
        else if(points!=null)
        {
            var pin = new VEShape(VEShapeType.Pushpin, points[2]);
            //pin.SetTitle("End Point");
            //pin.SetDescription("Broadcast end point");
            pin.SetCustomIcon("nav_plain_red.png");
            map.AddShape(pin);        
            
            //showPlayLink();
            //document.getElementById("userDetails").innerHTML="<p><strong>End of broadcast</strong></p>";
            //document.getElementById("userDetails").innerHTML="<p class=\"tableTextWhite\"><strong><a href=\"#\" onclick=\"playBroadcast()\">Play broadcast</a></strong></p>";           
    
            //Need to fix this bit    
            //var geoRssLayer1 = new VEShapeLayer();
            //var geoRssLayerSpec1 = new VEShapeSourceSpecification(VEDataType.GeoRSS, "trip-gps.xml", geoRssLayer1);
            //map.ImportShapeLayerData(geoRssLayerSpec1, onFeed1Load, false);
            return;
        }
    }
    catch(e)
    {
        //try{map.DeleteAllPolylines();}catch(e2){}
        showRoute=false;
        //alert("An exception occurred in the script. Error name: " + e.name 
        //   + ". Error message: " + e.message); 
    }   
        
   
}

function SetGpsPointsProgressive(p1,p2,p3,p4,p5,p6)
{
    
    try
    {
        
        frameIndex++;
        //lastGpsString=resp;
        //gpsData=resp.split(",");                 
        gpsData=new Array(
            p1,p2,p3,p4,p5,p6
        );
        if(gpsData.length>3)
        {     
            
            if(firstTime)
            {
                
                firstTime=false;
                startPoints=new VELatLong(parseFloat(gpsData[0]),parseFloat(gpsData[1]));
                spArray=new Array(
                    startPoints
                );
                var pin = new VEShape(VEShapeType.Pushpin,startPoints);
                pin.SetTitle("Start Point");
                //pin.SetDescription("Broadcast start point");
                pin.SetCustomIcon("nav_plain_green.png");
                map.AddShape(pin);
                map.SetMapView(spArray);
                //need to re-define mapStyle for embedding
                //map.SetMapStyle(mapStyle);
                
                map.SetZoomLevel(zoomLevel);                       
                return;    
            }
            if(currentPosition!=null)
            {
                map.DeleteShape(currentPosition);
            }           
            currentLatLong=new VELatLong(parseFloat(gpsData[gpsData.length-2]),parseFloat(gpsData[gpsData.length-1]));
            currentPosition=new VEShape(VEShapeType.Pushpin, currentLatLong);
            
            //currentPosition.SetTitle("Current location");                        
            currentPosition.SetCustomIcon("nav_plain_blue.png");
            map.AddShape(currentPosition);                    
           
            map.SetCenter(currentLatLong);
           
           if(showRoute)
           {                
                //alert(gpsData.length/2);
                points = new Array(gpsData.length/2);
                pindex=0;   
                for(i=0;i<gpsData.length;i+=2)
                {
                    //
                    if(i+1<gpsData.length)
                    {
                        //alert(gpsData[i]+" "+gpsData[i+1]);
                        points[pindex]=new VELatLong(parseFloat(gpsData[i]),parseFloat(gpsData[i+1]));
                        pindex++;
                    }
                }  
                //for(i=0;i<points.length;i++)
                //{
                //    alert(points[i]); 
                //}
                poly = new VEPolyline("lm"+frameIndex, points, color, width);   
                map.AddPolyline(poly);
                //alert("Poly added");
                //map.SetMapView(points);
                
                
                //map.SetCenter(points[points.length-1]);
               
            }            
           
        }
        else if(abortUpdates)
        {
            map.DeleteAllPolylines();
            abortUpdates=false;
        }
        else if(points!=null)
        {
            var pin = new VEShape(VEShapeType.Pushpin, points[2]);
            pin.SetTitle("End Point");
            //pin.SetDescription("Broadcast end point");
            pin.SetCustomIcon("nav_plain_red.png");
            map.AddShape(pin);        
            
            //showPlayLink();
            //document.getElementById("userDetails").innerHTML="<p><strong>End of broadcast</strong></p>";
            //document.getElementById("userDetails").innerHTML="<p class=\"tableTextWhite\"><strong><a href=\"#\" onclick=\"playBroadcast()\">Play broadcast</a></strong></p>";           
    
            //Need to fix this bit    
            //var geoRssLayer1 = new VEShapeLayer();
            //var geoRssLayerSpec1 = new VEShapeSourceSpecification(VEDataType.GeoRSS, "trip-gps.xml", geoRssLayer1);
            //map.ImportShapeLayerData(geoRssLayerSpec1, onFeed1Load, false);
            return;
        }
    }
    catch(e)
    {
        //debugger;
        showRoute=false;
        abortUpdates=true;
        
        //alert("Debug: " + e.name 
        //   + ". Error message: " + e.message); 
    }   
        
   
}
function EndOfBroadcast(p1,p2)
{
    //blue pin
    if(currentPosition!=null)
    {
        map.DeleteShape(currentPosition);
    }
    startPoints=new VELatLong(parseFloat(p1),parseFloat(p2));
    spArray=new Array(
                    startPoints
                );
    pin = new VEShape(VEShapeType.Pushpin,startPoints);
    //pin.SetTitle("End Point");
    //pin.SetDescription("Broadcast end point");
    pin.SetCustomIcon("nav_plain_red.png");
    map.AddShape(pin); 
    //map.SetZoomLevel(13);  
}
function ShowRoute()
{
    showRoute=true;
    //map.SetMapStyle(VEMapStyle.Hybrid);
    //map.SetZoomLevel(14);  
}
function ShowCompleteRoute()
{
    if(lastGpsString!=null)
    {
        showRoute=true;
        SetGpsPoints2(lastGpsString);
        showRoute=false;
    }
}
function ToggleShowShowRoute()
{
    showRoute=!showRoute;
    if(!showRoute)
    {
         try{map.DeleteAllPolylines();}catch(e2){}
    }
}
function SetMapStyle(mapStyle)
{
    
    if(mapStyle==1)
    {
        map.SetMapStyle(VEMapStyle.Aerial);
    }
    else if(mapStyle==2)
    {
        map.SetMapStyle(VEMapStyle.Birdseye);
    }
    else if(mapStyle==3)
    {
        map.SetMapStyle(VEMapStyle.Hybrid);
        
        map.SetZoomLevel(zoomLevel);     
    }
}
function StartOfBroadcast(p1,p2)
{
    
    startPoints=new VELatLong(parseFloat(p1),parseFloat(p2));
    spArray=new Array(
                    startPoints
                );
    pin = new VEShape(VEShapeType.Pushpin,startPoints);
    pin.SetCustomIcon("nav_plain_green.png");
    map.AddShape(pin); 
    map.SetZoomLevel(zoomLevel);    
}
function AddPolyLine(p1,p2,p3,p4,p5,p6)
{
    try
    {
        frameIndex++;   
        points=new Array(
            new VELatLong(parseFloat(p1),parseFloat(p2)),
            new VELatLong(parseFloat(p3),parseFloat(p4)),
            new VELatLong(parseFloat(p5),parseFloat(p6))
            );
        poly = new VEPolyline("lm"+frameIndex, points, color, width);   
        map.AddPolyline(poly);
        map.SetCenter(points[2]);
        
        //blue pin
        if(currentPosition!=null)
        {
            map.DeleteShape(currentPosition);
        }
        currentPosition=new VEShape(VEShapeType.Pushpin, points[2]);                        
        currentPosition.SetCustomIcon("nav_plain_blue.png");
        map.AddShape(currentPosition);  
    }
    catch(e)
    {
        //alert(e);
    } 
}