﻿    var map = null;
    var pinID = 0;
    var postcode = "SK6 3AH";
    var zoomLevel = 17;
    var postcodeField = "";
    var latField = "";
    var lonField = "";
    var xmlDoc;

    function FTGetRoute(routeStart, routeEnd)
    {  
        map = new VEMap('myMap');
        map.LoadMap();      
        map.GetRoute(routeStart,routeEnd,null,null,onGotRoute);
    }
    
    function FTLoadXML()
    {
        xmlDocLoc = document.getElementById('mapXML').innerHTML;
        if (window.ActiveXObject)
        {
            var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
            xmlDoc.async="false";
            xmlDoc.loadXML(xmlDocLoc);
        
        } else {
        
        var parser=new DOMParser();
        var xmlDoc=parser.parseFromString(xmlDocLoc,"text/xml");
        
        }
        return(xmlDoc);
    }
     
    function FTGetMap()
    {
        var xmlDoc = FTLoadXML();
        var locs = new Array; 
        
        map = new VEMap('myMap'); map.LoadMap();
               
        var tracking = xmlDoc.documentElement;
                       
        for (var iNode = 0; iNode < tracking.childNodes.length; iNode++)
        {
               var thisPID = tracking.childNodes[iNode].childNodes[0].childNodes[0].nodeValue;
               var thisNme = tracking.childNodes[iNode].childNodes[1].childNodes[0].nodeValue;
               var thisLat = tracking.childNodes[iNode].childNodes[2].childNodes[0].nodeValue;
               var thisLon = tracking.childNodes[iNode].childNodes[3].childNodes[0].nodeValue;
               var thisAdd = tracking.childNodes[iNode].childNodes[5].childNodes[0].nodeValue;
               var thisLoc = new VELatLong(thisLat,thisLon);
               
               locs.push(thisLoc);
               
               var pin = new VEPushpin(thisPID, thisLoc, null, thisNme, thisAdd);
               map.AddPushpin(pin);              
        }            
            map.SetMapView(locs);
    }
    
    function zoomToPin(lat,lon)
    {
        var loc = new VELatLong(lat, lon);
        map.SetCenterAndZoom(loc, 16);
    }
    

//------------------------------------------------------------------------------------------------------------------------
// Form Map Controls -----------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------

    function GetMap(postcodeSource,latDest,lonDest)
    
    // This function takes 3 input IDs, so we know which input boxes on the screen to address.
    
    {  
        try
        {   
            map = new VEMap('myMap');
            
            // Initialise global input IDs
            
            postcodeField = document.getElementById(postcodeSource);
            latField = document.getElementById(latDest);
            lonField = document.getElementById(lonDest);
            
            if(postcodeField.value.length > 0)
            {
                postcode = postcodeField.value;
            } else {
                zoomLevel = 5;
            }
            
            map.Find('', postcode, 1, zoomMap);
            map.LoadMap();
            map.HideDashboard();
            map.AttachEvent("onclick", mapClick);
        }
        catch(err)
        {

        }
    }

    function updateMapFromPostcode()
    {
        if(postcodeField.value.length > 0)
        {
            zoomLevel = 17;
            postcode = postcodeField.value;
            map.Find('', postcode, 1, markNewLocation);
        }
    }
    
    function markNewLocation()
    {
        latField.value = map.GetCenter().Latitude;
        lonField.value = map.GetCenter().Longitude;
        zoomMap();
    }
    
    function zoomMap()
    {
        map.SetZoomLevel(zoomLevel);
        map.DeleteAllPushpins(); 
        AddPin(lonField.value, latField.value, '', '')       
    }
    
     function mapClick(e)
     {
        lonField.value = e.view.LatLong.Latitude;
        latField.value = e.view.LatLong.Longitude;
        map.SetCenter(e.view.LatLong);
        map.DeleteAllPushpins();      
        AddPin(e.view.LatLong.Longitude, e.view.LatLong.Latitude, '', '')
     }
     
//------------------------------------------------------------------------------------------------------------------------
// End Form Map Controls -------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------
   
    function loadPoiArray()
    {

    }

    function AddPin(thisLat, thisLong, thisTitle, thisDesc)
    {   
        var pin = new VEPushpin(pinID, new VELatLong(thisLong, thisLat), null, thisTitle, thisDesc);
        map.AddPushpin(pin);
        pinID++;
    }  

    function onGotRoute(route)
    {
        map.ZoomOut(3);
        var routeinfo="";
        var bg = 0;
        //routeinfo += "<p>Total distance: ";
        //routeinfo += route.Itinerary.Distance+" ";
        //routeinfo += route.Itinerary.DistanceUnit+"\n";
        
        routeinfo += "<table cellspacing=\"0\" cellpadding=\"3\" border=\"0\" style=\"color:Black;background-color:White;width:355px;border-collapse:collapse;\">";

        var len = route.Itinerary.Segments.length;
        for(var i = 0; i<len ;i++)
        {
            routeinfo += "<tr><td style=\"background-color:";
            if ( bg == 0 ) { routeinfo += "#FFFFFF"; } else {routeinfo += "#F0F0F0"; }
            routeinfo += "\"><p>";
            if ( i == 0 || i == len - 1 ) { routeinfo += "<strong>"; } 
            routeinfo += route.Itinerary.Segments[i].Instruction+" ";
            if ( i == 0 || i == len - 1 ) { routeinfo += "</strong>"; } 
            routeinfo += "</p></td><td style=\"background-color:";
            if ( bg == 0 ) { routeinfo += "#FFFFFF"; } else {routeinfo += "#EEEEEE"; }
            routeinfo += "\"><p>";
            routeinfo += route.Itinerary.Segments[i].Distance;           
            routeinfo += " " + route.Itinerary.DistanceUnit;
            routeinfo += "</p></td></tr>";
            bg = bg + 1;
            if ( bg == 2 ){ bg = 0; }
        }
        
        routeinfo += "<table>";
        
        if(document.getElementById("routeDirections")){
        document.getElementById("routeDirections").innerHTML = routeinfo;
        }
    }   
