// JScript File

var map = null;
var delay = 5000;
var markers = null;
var markerArray = new Array();
var xmlDataMainURL = "xmldat.aspx";
var ImageMainURL = "Image2.aspx";
var WebRoot="";
var xmlReqParameter1 = "";
var xmlReqParameter2 = "";
var xmlReqParameter3 = "";
var xmlReqParameter4 = "";
var ImageReqParameter1 = "tekst=";
var ImageReqParameter2 = "billede=";
var Directions = new GDirections();
var bounds = new GLatLngBounds();
var http_request = false;
var currentState = 0;
var isStart = true;
//Var to use in loop scenario
var showonce = false;

//START function load ********************
function load(){
    if (GBrowserIsCompatible()) {
    
        var mapname = "map";
        map = new GMap2(document.getElementById(mapname));
        AddMapControls();
        map.setCenter(new GLatLng(55.69386, 12.461092), 8);
        // map.setCenter(new GLatLng(0,0), 0);
        RefreshData();
        
    }
}

//END function load ********************

//START function RefreshData ********************
function RefreshData(){
    var ReqParameter = "";
    
    ReqParameter = xmlReqParameter1;
    ReqParameter = "Type=latest";
    if (xmlReqParameter2.length > 0) {
        if (ReqParameter.length > 0) {
            ReqParameter += "&"
        }
        ReqParameter += xmlReqParameter2
    }
    
    if (xmlReqParameter3.length > 0) {
        if (ReqParameter.length > 0) {
            ReqParameter += "&"
        }
        ReqParameter += xmlReqParameter3
    }
    if (xmlReqParameter4.length > 0) {
        if (ReqParameter.length > 0) {
            ReqParameter += "&"
        }
        ReqParameter += xmlReqParameter4
    }
    makeRequest(xmlDataMainURL, ReqParameter);
    
    setTimeout('RefreshData()', delay);
    
}

//END function RefreshData ********************


//START function makeRequest ********************
function makeRequest(url, parameters){
    http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
        }
    }
    else 
        if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } 
            catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } 
                catch (e) {
                }
            }
        }
    if (!http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
    }
    
    
    http_request.onreadystatechange = DoUpdateAll;
    
    
    http_request.open('GET', url + "?" + parameters, true);
    try {
        http_request.send(null);
    } 
    catch (e) {
        //do nothing
    }
}

//END function makeRequest ********************


//START function DoUpdateAll ********************
function DoUpdateAll(){

    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
        
            var xml = http_request.responseXML;
            if (xml.documentElement != null) {
            
                markers = xml.documentElement.getElementsByTagName("GPSDATAENTRY");
                
                if (markers.length > 0) {
                    // Cleanup previous listeners and markers during refresh 
                    while (markerArray.length > 0) {
                        var marker = markerArray.pop();
                        GEvent.clearInstanceListeners(marker);
                        marker = null;
                    }
                    markerArray = new Array();
                    
                }
                map.clearOverlays();
                var bounds = new GLatLngBounds();
                var hasMarker = false;
                for (var i = 0; i < markers.length; i++) {
                    var strDesc = "";
                    var strIMEI = "";
                    var strLon = "";
                    var strLat = "";
                    var strTimeStamp = "";
                    var strSpeed = "";
                    var strDirection = "";
                    var strLatest = "";
                    var strLogAgeSec = "";
                    var strIngnitionOn="";
                    
                    if (markers[i].childNodes.length > 0) {
                        for (var iVal = 0; iVal < markers[i].childNodes.length; iVal++) {
                            var node = markers[i].childNodes.item(iVal);
                            
                            switch (node.nodeName) {
                                case "GPSDATA_IMEI":
                                    strIMEI = getInnerText(node);
                                    break;
                                    
                                case "GPSDATA_Lon":
                                    strLon = getInnerText(node);
                                    break;
                                    
                                case "GPSDATA_Lat":
                                    strLat = getInnerText(node);
                                    break;
                                    
                                case "GPSDATA_GPSTimeStamp":
                                    strTimeStamp = getInnerText(node);
                                    break;
                                    
                                case "GPSDATA_SpeedKmh":
                                    strSpeed = getInnerText(node);
                                    break;
                                    
                                case "GPSDATA_Direction":
                                    strDirection = getInnerText(node);
                                    break;
                                    
                                case "GPSDATA_Latest":
                                    strLatest = getInnerText(node);
                                    break;
                                    
                                case "GPSDATA_LogAgeSec":
                                    strLogAgeSec = getInnerText(node);
                                    break;
                                    
                                case "GPSDATA_IgnitionOn":
                                    strIngnitionOn = getInnerText(node);
                                    break;                                    
                                    
                            }//End switch                                                       
                        } //End for  
                        
                        //check if vehicle has stopped
                        //if (parseFloat(strSpeed) > 2) {
                        var MarkerState = 0;
                        if (strIngnitionOn=="True") {
                            MarkerState = getMarkerState(strLogAgeSec);

                            var point = new GLatLng(parseFloat(strLat), parseFloat(strLon));
                            var Icon = new GIcon();
                            var ImageURL = ImageMainURL + "?";
                            
                            
                            //Blank transparent icon used for accurate onclick()
                            var BlankIcon = new GIcon();
                            var BlankImageUrl = ImageMainURL + "?" + "billede=blank.png";
                            BlankIcon.image = BlankImageUrl;
                            //BlackIcon.iconSize = new GSize(29, 35);
                            BlankIcon.iconAnchor = new GPoint(14, 17);
                            BlankIcon.infoWindowAnchor = new GPoint(14, 17)
                            
                            //ImageURL+= i;
                            ImageURL += "&" + ImageReqParameter2;
                            ImageURL += GetImageName(strDirection, MarkerState, "Direction")
                            Icon.image = ImageURL;
                            //Icon.iconSize = new GSize(250, 250);
                            //Icon.iconSize = new GSize(29, 35);//20,34
                            Icon.iconAnchor = new GPoint(125.5, 124.5);
                            //Icon.iconAnchor = new GPoint(14, 17);
                            Icon.infoWindowAnchor = new GPoint(124, 125);
                            //Icon.infoWindowAnchor = new GPoint(14, 17);//5,2
                            
                            strDesc = "<strong>IMEI: </strong>" + strIMEI;
                            strDesc += "<br><strong>Tidspunkt: </strong>" + getDateDK(strTimeStamp);
                            //strDesc += "<br><strong>Hastighed: </strong>" + parseInt(strSpeed) + " km/t";
                            
                            
                            //Add the tracker marker
                            opts = {
                                "icon": Icon,
                                "clickable": false,
                                "zIndexProcess": importanceOrder
                            };
                            var marker = new GMarker(point, opts);
                            marker.importance = 1;
                            //Add the click tracker marker
                            var ClickMarker = createMarkerInfoWindowHTMLPanToPoint(point, BlankIcon, strDesc);
                            ClickMarker.importance = 2;
                            markerArray.push(ClickMarker);
                        
                            map.addOverlay(marker);
                            
                            map.addOverlay(ClickMarker);
                            hasMarker = true;
                            bounds.extend(point);
                        }
                        
                    }
                }
                
                
                
                if (isStart == true) {
                    if (hasMarker == true) {
                        map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
                        map.setCenter(bounds.getCenter());
                        isStart = false;
                    }
                    else {
                        map.setCenter(new GLatLng(55.69386, 12.461092), 9);
                    }
                    
                }
            }
        }
    }
    
}

//END function DoUpdateAll ********************

//START function DoUpdateAll ********************
function RunTrace(){
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
        
            var xml = http_request.responseXML;
            markers = xml.documentElement.getElementsByTagName("GPSDATAENTRY");
            var encodeLevels = "";
            if (markers.length > 0) {
                map.clearOverlays();
            }
            
            map.setCenter(new GLatLng(0, 0), 0);
            bounds = new GLatLngBounds();
            //var lastpoint=null;
            
            var EncodedLonLat = xml.documentElement.getElementsByTagName("LIST_GPS_ENCODED");
            for (var i = 0; i < EncodedLonLat.length; i++) {
                var strIMEI = "";
                var strEncodedLonLat = "";
                for (var iVal = 0; iVal < EncodedLonLat[i].childNodes.length; iVal++) {
                    var node = EncodedLonLat[i].childNodes.item(iVal);
                    
                    switch (node.nodeName) {
                        case "GPS_ENCODED_IMEI":
                            strIMEI = getInnerText(node);
                            break;
                            
                        case "GPS_ENCODED_EncodedLonLat":
                            strEncodedLonLat = getInnerText(node);
                            break;
                    }
                }
                
                var DecodedLatLonArray = decodeLineToGLatLng(strEncodedLonLat);
                
                var TotalLatLng = DecodedLatLonArray.length;
                
                var test = [];
                for (var x = 0; x < TotalLatLng; x++) {
                
                    var point = DecodedLatLonArray[x];
                    var Icon = new GIcon();
                    
                    var ImageURL = ImageMainURL + "?" + ImageReqParameter1;
                    var ImageType = "None";
                    if (x == 0) {
                        //test.push(point);//start point
                        ImageType = "StartTrack";
                    }
                    else 
                        if (x == TotalLatLng - 1) {
                            //test.push(point);//end point
                            ImageType = "EndTrack";
                        }
                    ImageURL += GetImageName(0, 0, ImageType);
                    Icon.image = ImageURL;
                    
                    Icon.iconSize = new GSize(24, 38);//tracking icon
                    Icon.iconAnchor = new GPoint(12, 38);//tracking icon
                    Icon.infoWindowAnchor = new GPoint(12, 1);//tracking icon
                    if (ImageType != "None") {
                        var marker = new GMarker(point, Icon);
                        map.addOverlay(marker);
                    }
                }
                
                encodeLevels = getEncodeLevels("B", TotalLatLng);
                //GDirections
                var counter = 0;
                for (var y = 0; y < DecodedLatLonArray.length; y++) {
                    if (counter >= 5) {
                        counter = 0;
                    }
                    var waypoint = DecodedLatLonArray[y];
                    
                    if (counter == 0) {
                        test.push(waypoint);
                    }
                    if (y == DecodedLatLonArray.length - 1) {
                        test.push(waypoint);
                    }
                    counter++;
                }
                
                GEvent.addListener(Directions, "error", handleErrors_Direction);
                //Directions
                GEvent.addListener(Directions, "load", DirectionsLoader);
                
                var DirectionPolyline = null;
                Directions.loadFromWaypoints(test, {
                    getPolyline: true
                });
            }
        }
    }
}

//END function function DoUpdateAll ********************

//START function DoUpdateSelected ********************
function DoUpdateSelected(){
    //plot selected markers
}

//END function function DoUpdateSelected ********************
