﻿var m_map = null;
var token = "";
var xmlhttp;
var serverpath = "http://eu-tts.inrix.com/v3/Tiles/Tile.ashx";
var m_DefaultAPIInrix = "http://eu-api.inrix.com/v3/Traffic/Inrix.ashx";
var m_penWidth = 0;
var m_TrafficMode = 0;
var m_trafficInfo;
var m_TrafficZoomLevel = 0;
var m_MinCameraZoomLevel = 9;
var m_cameraClicked = 0;
var m_showCameras = 0;
var m_accidentMarkers = 0;
var m_roadWorkMarkers = 0;
var m_camerasArray = new Array();
var m_roadWorksArray = new Array();
var m_accidentsArray = new Array();
var m_processingMarker = null;
var m_gettingTiles = 0;
var m_gettingTilesTimer = null;
var m_DisplayTraffic = 0;
var m_currentCode = null;
var m_currentIconSize = new GSize(16, 16);
var m_currentIconPoint = new GPoint(8, 8);
var m_trafficRefreshRate = 600000; //Milliseconds
var m_trafficRefresh = 0;
var m_mapTop = 0;
var m_mapLeft = 0;

function GetMap() {
    if (GBrowserIsCompatible()) {
        m_map = new GMap2(document.getElementById('myGoogleMap'), { googleBarOptions: { showOnLoad: true} });
        
        var customUI = m_map.getDefaultUI();
        var latlng = new GLatLng(51.471119, -0.186768);
        customUI.maptypes.hybrid = false;
        m_map.setUI(customUI);
        m_map.enableGoogleBar();
        m_map.setCenter(latlng, 6);
        m_map.scrollWheelZoomEnabled();
        
        m_map.enableContinuousZoom();
        m_map.enableDoubleClickZoom();
        m_map.enableScrollWheelZoom();
        GEvent.addListener(m_map, "zoomend", onZoomEnd);
        GEvent.addListener(m_map, "moveend", GetTrafficCameras);
           
        setTimeout(function() { var oCamera = document.getElementById("DisplayCameras"); DisableCheckBox(oCamera); }, 0);
        setTimeout(function() { document.getElementById("DisplayCameras").checked = false; }, 0);
        setTimeout(function() { document.getElementById("DisplayTraffic").checked = false; }, 0);
        setTimeout(function() { document.getElementById("DisplayRoadWorks").checked = false; }, 0);
        setTimeout(function() { document.getElementById("DisplayAccidents").checked = false; }, 0);
        setTimeout(RefreshTraffic, m_trafficRefreshRate);
        
    }

}

function RefreshTraffic() {
    if (m_DisplayTraffic == 1 && m_processingMarker == null) {
        m_trafficRefresh = 1;
        onZoomEnd();
    }
    setTimeout(RefreshTraffic, m_trafficRefreshRate);
}

function ClickShowTraffic() {
    if (m_DisplayTraffic == 0) {
        m_DisplayTraffic = 1;
        onZoomEnd();       
    }
    else {
        m_DisplayTraffic = 0;
        if(m_trafficInfo != null) {
            m_map.removeOverlay(m_trafficInfo);
            m_trafficInfo = null;
        }
    }
}

function customGetTileURL(tile, zoom) {
    if (m_gettingTiles == 0) {
        m_gettingTiles = 1;
        m_currentCode = GetKeyCode();
        Processing();
    }
    //m_gettingTiles = 1;
    var projection = new GMercatorProjection(19);

    // Four vertices in pixel in GPoint coordinates
    var p1 = new GPoint(tile.x * 256, tile.y * 256);
    var p2 = new GPoint(p1.x + 256, p1.y + 256);

    // latitude/longitude of four vertices in decimal degree
    var latlng1 = projection.fromPixelToLatLng(p1, zoom);
    var latlng2 = projection.fromPixelToLatLng(p2, zoom);

    var mapheight = 256;
    var mapwidth = 256;
    var corner1 = latlng1.lat() + "|" + latlng1.lng();
    var corner2 = latlng2.lat() + "|" + latlng2.lng();


    var dt = new Date();
    var timeVal = parseInt((dt.getTime()/1000)/60); 	//pass minutes value to avoid cached traffic tile
    
    SetTrafficPenWidth(zoom);
    //var strURL = serverpath + '?Action=GetTrafficTile&Token=' + m_InrixToken + '&Corner1=' + corner1 + '&Corner2=' + corner2 + '&format=png' + '&height=' + mapheight + '&width=' + mapwidth;
    var strURL;
    if (m_TrafficMode != "All") {
        //strURL = serverpath + '?Action=GetTrafficTile&Token=' + m_currentCode +
        strURL = serverpath + '?Action=GetTrafficTileForSets&TMCSetIds=202&Token=' + m_currentCode +
            '&corner1=' + corner1 + '&corner2=' + corner2 + '&format=png' + '&height=' + mapheight + '&width=' + mapwidth + '&penwidth=' + m_penWidth + '&coverage = 8' + '&FRCLevel=' + m_TrafficMode + '&opacity=70&timeval=' + timeVal;
    }
    else {
        //strURL = serverpath + '?Action=GetTrafficTile&Token=' + m_currentCode +
        strURL = serverpath + '?Action=GetTrafficTileForSets&TMCSetIds=202&Token=' + m_currentCode +
            '&corner1=' + corner1 + '&corner2=' + corner2 + '&format=png' + '&height=' + mapheight + '&width=' + mapwidth + '&penwidth=' + m_penWidth + '&coverage = 8' + '&opacity=70&timeval=' + timeVal;
    }

    if (m_gettingTilesTimer == null)
        m_gettingTilesTimer = setTimeout(cancelGettingTiles, 1500);
    else {
        //Need to cancel previous and start again
        clearTimeout(m_gettingTilesTimer);
        m_gettingTilesTimer = setTimeout(cancelGettingTiles, 1500);
    }
    
    return strURL;
}

function cancelGettingTiles() {
    m_gettingTilesTimer = null;
    m_gettingTiles = 0;
    m_currentCode = null;
    HideProcessing();
}


function ClearOverlays() {
    m_map.clearOverlays();
}

function GetTrafficImage(cameraid) {
    var url;

    var dt = new Date();
    var timeVal = parseInt((dt.getTime() / 1000) / 60); 	//pass minutes value to avoid cached traffic tile
    url = m_DefaultAPIInrix + "?Action=GetTrafficCameraImage&token=";
    url = url + GetKeyCode();
    url = url + "&CameraID=";
    url = url + cameraid;
    url = url + "&DesiredWidth=640&DesiredHeight=480" + '&timeval=' + timeVal;

    open(url, "_blank");
}

function ClickShowCamera() {
    m_showCameras = 1;
    Processing();
    setTimeout(GetTrafficCameras, 1000);
}

function GetTrafficCameras() {
   
    if (m_InrixToken == "" || m_showCameras == 0 || m_map.getZoom() < m_MinCameraZoomLevel+1) {
        if (m_gettingTiles == 0 && m_showCameras == 1) {
            HideProcessing();
        }
        m_showCameras = 0;
        
        return;
    }

//    if (m_cameraClicked == 1) {
//        m_cameraClicked = 0;
//        if (m_gettingTiles == 0 && m_showCameras == 1) {
//            HideProcessing();
//        }
//        return;
//    }

    var bounds = m_map.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();

    var corner1 = southWest.lat() + '|' + southWest.lng();
    var corner2 = northEast.lat() + '|' + northEast.lng();
    var dt = new Date();
    var timeVal = parseInt(dt.getTime());
    InrixTraffic.GetCameras(GetKeyCode(), corner1, corner2, timeVal, GetCameraResponse);

}

function GetCameraResponse(result) {
    var xmlDoc;
     
    if (window.DOMParser)
      {
      parser=new DOMParser();
      xmlDoc = parser.parseFromString(result, "text/xml");
      }
    else // Internet Explorer
      {
      xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
      xmlDoc.async="false";
      xmlDoc.loadXML(result); 
      } 

    var x = xmlDoc.getElementsByTagName("Camera");

    //clearTrafficCameras();
    var firstLoad = true;
    if (m_camerasArray.length > 0) {
        firstLoad = false;
    }
    for (var i = 0; i < x.length; i++) 
    {
            var xmlNode = x[i];
            var cameraid = xmlNode.getAttribute("id");
            var name = GetNodeText(xmlNode.getElementsByTagName("Name")[0]);

            var y = xmlDoc.getElementsByTagName("Status");
            var statusNode = y[i];
            var status = statusNode.getAttribute("outOfService");
            if (status != "true") 
            {
                var z = xmlDoc.getElementsByTagName("Point");
                var lat = z[i].getAttribute("latitude");
                var long = z[i].getAttribute("longitude");
                //If lat or long are not numeric then do not add the camera
                var ptLatLong = new GLatLng(lat, long);
                if (IsNumeric(lat) == false || IsNumeric(long) == false) {
                    continue;
                }
                
                var updateFreq = statusNode.getAttribute("updateFreq");

                var copyright = GetNodeText(xmlNode.getElementsByTagName("CopyrightNotice")[0]);

                if (firstLoad == false) {
                    if (DoesCameraExist(cameraid) == false) {
                        mk = CreateMarker(ptLatLong, cameraid, name, updateFreq, copyright);
                        m_map.addOverlay(mk);
                        m_camerasArray.push(mk);
                    }
                }
                else {
                    mk = CreateMarker(ptLatLong, cameraid, name, updateFreq, copyright);
                    m_map.addOverlay(mk);
                    m_camerasArray.push(mk);
                }
                
                
                
            }


        }
        if (m_gettingTiles == 0) {
            HideProcessing();
        }
    }

    function DoesCameraExist(id) {
        var size = m_camerasArray.length;
        for (var i = 0; i < size; i++) {
            var arrayID = m_camerasArray[i].id;
            if (id == arrayID) {
                return true;
            }
        }
        return false;
    }

    function GetNodeText(node) {
        if (node.text) {
            return node.text;
        }
        else {
            return node.textContent;
        }
    }

    function clearTrafficCameras() {
        var size = m_camerasArray.length;
        for (var i = 0; i < size; i++) {
            var item = m_camerasArray.pop()
            m_map.removeOverlay(item);
            delete item;
        }
    }

    function IsNumeric(value) {
        if (typeof (value) != "number") 
        {
            if (typeof (value == "string"))
            {
                if (value.match(/^[\-\.\d]+$/) == null) {
                    return false;
                }
            }
            else
                return false;

        }
        return true;
    }

function CreateMarker(latlong, cameraid, cameraname, updatefreq, copyrightnotice) {
    var iconurl = "Images/MapIcons/CameraSign16.gif";

    var new_icon = new GIcon();
    new_icon.image = iconurl;
    new_icon.size = m_currentIconSize;
    new_icon.iconAnchor = new GPoint(12, 12);
    new_icon.infoWindowAnchor = new GPoint(12, 12);

    var mkopt;
    mkopt = {};
    mkopt.icon = new_icon;
    mkopt.title = cameraname;
    mkopt.id = cameraid;

    var new_marker = new GMarker(latlong, mkopt);

    if (updatefreq > 0) {
        freq = Math.round(updatefreq / 1000 / 60);
        freq = "<br> <b>Image Updates Every " + freq + " Min(s)</b>";
    }


    copyrightnotice = copyrightnotice.replace("www", " www");
    copyrightnotice = copyrightnotice.replace("Â", "");

    GEvent.addListener(new_marker, "click",
    function() {
    //m_cameraClicked = 1;
    var dt = new Date();
    var timeVal = parseInt((dt.getTime() / 1000) / 60);
    var strImgUrl = m_DefaultAPIInrix + "?Action=GetTrafficCameraImage&token=" + GetKeyCode() + "&CameraID=" + cameraid + "&DesiredWidth=320&DesiredHeight=240"+'&timeval=' + timeVal;
        new_marker.openInfoWindowHtml("<img src=" + strImgUrl + " width=320 height=240><span class='copyRightNotice'>" + freq + " <BR>" + copyrightnotice + "</span>");
        //new_marker.openInfoWindowTabsHtml([new GInfoWindowTab("Picture", "<img src=" + strImgUrl + " width=320 height=240>"), new GInfoWindowTab("Information", freq + " <br> <b>" + copyrightnotice + "</b>")]);
        });

    return new_marker;
}


function SetTrafficPenWidth(zoom) {
    if (zoom < 4) {
        m_penWidth = 2;
    }
    else if (zoom < 8) {

        m_penWidth = 4;
    }
    else if (zoom < 12) {

        m_penWidth = 6;
    }
    else if (zoom < 14) {

        m_penWidth = 8;
    }
    else if (zoom < 16) {

        m_penWidth = 10;
    }
    else if (zoom < 18) {

        m_penWidth = 12;
    }
    else if (zoom < 20) {
        m_penWidth = 14;
    }
}

function onZoomEnd() {
    var zoomLevel = m_map.getZoom();
    var newMode = "All";
    if (zoomLevel > -1 && zoomLevel < 10) {
        //clearCameras();DisableCheckBox(fffff)EnableCheckBox(fffff)
        setTimeout(function() { DisableCheckBox(document.getElementById("DisplayCameras"));}, 0);
        setTimeout(function() { document.getElementById("DisplayCameras").checked = false; }, 0);
        clearTrafficCameras();
        newMode = "1";
    }
    else if (zoomLevel > 9 && zoomLevel < 11) {
    setTimeout(function() { EnableCheckBox(document.getElementById("DisplayCameras")); }, 0);
    newMode = "1,2";
    }
    else if (zoomLevel > 10 && zoomLevel < 12) {
    setTimeout(function() { EnableCheckBox(document.getElementById("DisplayCameras")); }, 0);
    newMode = "1,2,3";
    }
    else {
        setTimeout(function() { EnableCheckBox(document.getElementById("DisplayCameras")); }, 0);
    }

    maptool_viewtraffic_inrixtraffic_new(newMode);
    m_trafficRefresh = 0;
}



function maptool_viewtraffic_inrixtraffic_new(nNewMode) {
    if (m_DisplayTraffic == 0)
        return;
    
    //same mode do nothing
    if (nNewMode == m_TrafficMode && m_trafficInfo != null && m_trafficRefresh == 0) {
        return;
    }
    //traffic mode changed
    if ((nNewMode != m_TrafficMode || m_trafficRefresh == 1) && m_trafficInfo != null ) {
        m_trafficInfo.hide();
        m_map.removeOverlay(m_trafficInfo);
        m_trafficInfo = null;
    }

    m_TrafficMode = nNewMode;
        setTimeout(AddTrafficTile, 1000);
        //Need to enable camera link

        if(m_trafficInfo != null)
            m_trafficInfo.show();
}

function AddTrafficTile() {

    var copyright = new GCopyright(1, new GLatLngBounds(new GLatLng(-90, -180), new GLatLng(90, 180)), 0, "©2009 INRIX");
    var copyrightCollection = new GCopyrightCollection("Traffic data");
    copyrightCollection.addCopyright(copyright);

    var trafficTileLayer = new GTileLayer(copyrightCollection, 1, 18);

    trafficTileLayer.getTileUrl = customGetTileURL;
    trafficTileLayer.isPng = function() { return true; };
    //trafficTileLayer.getOpacity = function() { return 0.7; };

    m_trafficInfo = new GTileLayerOverlay(trafficTileLayer);

    m_map.addOverlay(m_trafficInfo);
    
    m_trafficInfo.show();
}


function GetKeyCode() {
    //Need to make a synchronous ajax call to get the key from inrix
    try {
        AJAX = new XMLHttpRequest();
    }
    catch (trymicrosoft) {
        try {
            AJAX = new ActiveXObject('Msxml12.XMLHTTP');
        }
        catch (othermicrosoft) {
            strError = othermicrosoft.message + ":" + othermicrosoft.number;
            try {
                AJAX = new ActiveXObject('Microsoft.XMLHTTP');
            }
            catch (failed) {
                m_request = null;
                alert(strError += " - " + failed.message + ":" + failed.number);
            }
        }
    }
       
    if (AJAX) {
        AJAX.open("POST", "RetrieveAdditionalData.ashx", false);
        AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        AJAX.send("Action=GetInrixKey&key=" + m_InrixToken);
        if (AJAX.responseText == "") {
            alert("There was an error getting the key please refresh the page to fix the issue!");
        }
        return AJAX.responseText;
    }
    else {
        alert("There was an error getting the key please refresh the page to fix the issue!");
        return ""; 
    }
}

function DisplayRoadworks() {
    Processing();
    setTimeout(DisplayRoadworksA, 1000);
}

function DisplayRoadworksA() {
    if (m_roadWorkMarkers == 1) {
        for (var i = 0; i < m_roadWorksArray.length; i++) {
            m_map.removeOverlay(m_roadWorksArray[i]);
        }
        m_roadWorkMarkers = 0;
        if (m_gettingTiles == 0) {
            HideProcessing();
        }
        return;
    }
    for (var i = 0; i < m_Roadworks.length; i++) {
        var ptLatLong = new GLatLng(m_Roadworks[i].Latitude, m_Roadworks[i].Longitude);
        if (IsNumeric(m_Roadworks[i].Latitude) == false || IsNumeric(m_Roadworks[i].Longitude) == false) {
            continue;
        }
        var iconurl = "Images/MapIcons/rw_yellow16.gif";
        switch (m_Roadworks[i].EffectNumber)
        {
            case 0:
                iconurl = "Images/MapIcons/rw_slight16.gif";
                break;
            case 2:
                iconurl = "Images/MapIcons/rw_slight16.gif";
                break;
            case 3:
                iconurl = "Images/MapIcons/rw_orange16.gif";
                break;
            case 4:
                iconurl = "Images/MapIcons/rw_yellow16.gif";
                break;
        }
        var linkTo = m_Roadworks[i].Description.indexOf("Link to ");
        var descriptionText = m_Roadworks[i].Description;
        if(linkTo > -1)
            descriptionText = m_Roadworks[i].Description.substring(0, linkTo);
        
        var infoString = "From:" + m_Roadworks[i].DateFromString +
            "<br>To:" + m_Roadworks[i].DateToString +
             "<br>Lanes Closed:" + m_Roadworks[i].NumberOfAffectedLanes + "<br>Lanes Open:" +
             m_Roadworks[i].NumberOfOperationalLanes + "<br>Traffic Restriction:" + m_Roadworks[i].TrafficRestriction + "<BR>" + "<BR>";

        var new_marker = CreateGenericMarker(ptLatLong, iconurl, m_Roadworks[i].BriefDescription, infoString, descriptionText);

        m_map.addOverlay(new_marker);
        m_roadWorksArray.push(new_marker);
    }
    if (m_gettingTiles == 0) {
        HideProcessing();
    }
    m_roadWorkMarkers = 1;
}

function CreateGenericMarker(ptLatLong, iconurl, title, infoString, description ) {
    
    var new_icon = new GIcon();
    new_icon.image = iconurl;
    new_icon.size = m_currentIconSize;
    new_icon.iconAnchor = m_currentIconPoint;
    new_icon.infoWindowAnchor = m_currentIconPoint;
    
    var mkopt;
    mkopt = {};
    mkopt.icon = new_icon;
    mkopt.title = title;
    //Need to add a width restriction on the description
    description = "<table width=250><tr><td>" + description + "</td></tr></table>";
    var new_marker = new GMarker(ptLatLong, mkopt);
    GEvent.addListener(new_marker, "click", function() {
        new_marker.openInfoWindowTabsHtml([new GInfoWindowTab("General", infoString), new GInfoWindowTab("Description", description)]);
    }
        );
    return new_marker;
}


function DisplayAccidents() {
    Processing();
    if (m_accidentMarkers == 1) {
        for (var i = 0; i < m_accidentsArray.length; i++) {
            m_map.removeOverlay(m_accidentsArray[i]);
        }
        m_accidentMarkers = 0;
        if (m_gettingTiles == 0) {
            HideProcessing();
        }
        return;
    }
    for (var i = 0; i < m_Accidents.length; i++) {
        var ptLatLong = new GLatLng(m_Accidents[i].Latitude, m_Accidents[i].Longitude);
        if (IsNumeric(m_Accidents[i].Latitude) == false || IsNumeric(m_Accidents[i].Longitude) == false) {
            continue;
        }
        var iconurl = "Images/MapIcons/AccidentsSign.gif";
        switch (m_Accidents[i].EffectNumber) {
            case 0:
                iconurl = "Images/MapIcons/AccidentsSign.gif";
                break;
            case 2:
                iconurl = "Images/MapIcons/AccidentsSign.gif";
                break;
            case 3:
                iconurl = "Images/MapIcons/AccidentsSign.gif";
                break;
            case 4:
                iconurl = "Images/MapIcons/AccidentsSign.gif";
                break;
        }


        //var new_marker = new GMarker(ptLatLong, mkopt);
        var linkTo = m_Accidents[i].Description.indexOf("Link to ");
        var descriptionText = m_Accidents[i].Description;
        if (linkTo > -1)
            descriptionText = m_Accidents[i].Description.substring(0, linkTo);
        
        var infoString = "From:" + m_Accidents[i].DateFromString +
            "<br>To:" + m_Accidents[i].DateToString +
             "<br>Lanes Closed:" + m_Accidents[i].NumberOfAffectedLanes + "<br>Lanes Open:" +
             m_Accidents[i].NumberOfOperationalLanes + "<br>Traffic Restriction:" + m_Accidents[i].TrafficRestriction + "<BR>" + "<BR>";

        var new_marker = CreateGenericMarker(ptLatLong, iconurl, m_Accidents[i].BriefDescription, infoString, descriptionText);

        m_map.addOverlay(new_marker);
        m_accidentsArray.push(new_marker);
    }

    HideProcessing();
    
    m_accidentMarkers = 1;
}

function Processing() {
    window.status = "Processing Traffic Data!";
    m_processingMarker = document.getElementById("ProcessingDiv");
    if (m_processingMarker.style.visibility != "visible") {
        m_processingMarker.style.visibility = "visible";
        var pos = GetMapPosition();

        m_processingMarker.style.top = pos[1] + 97;
        m_processingMarker.style.left = pos[0] + 150;
        DisableCheckBoxes();
    }
}

function DisableCheckBoxes() {
    //if (m_showCameras == 1) {
        var camera = document.getElementById("DisplayCameras");
        setTimeout(function() { DisableCheckBox(camera); }, 0);
    //}
    var traffic = document.getElementById("DisplayTraffic");
    setTimeout(function() { DisableCheckBox(traffic); }, 0);
    var roadworks = document.getElementById("DisplayRoadWorks");
    setTimeout(function() { DisableCheckBox(roadworks); }, 0);
    var accidents = document.getElementById("DisplayAccidents");
    setTimeout(function() { DisableCheckBox(accidents); }, 0);
}

function EnableCheckBoxes() {
    if (m_showCameras == 1) {
        var camera = document.getElementById("DisplayCameras");
        setTimeout(function() { EnableCheckBox(camera); }, 0);
    }
    var traffic = document.getElementById("DisplayTraffic");
    setTimeout(function() { EnableCheckBox(traffic); }, 0);
    var roadworks = document.getElementById("DisplayRoadWorks");
    setTimeout(function() { EnableCheckBox(roadworks); }, 0);
    var accidents = document.getElementById("DisplayAccidents");
    setTimeout(function() { EnableCheckBox(accidents); }, 0);
}

function DisableCheckBox(obj) {
    obj.disabled = "disabled";
    obj.parentNode.disabled = "disabled";
}

function EnableCheckBox(obj) {
    obj.disabled = "";
    obj.parentNode.disabled = "";
}

function HideProcessing() {
    if (m_processingMarker != null) {
        m_processingMarker.style.visibility = 'hidden';
        m_processingMarker = null;
    }
    window.status = "Completed Traffic Data";
    EnableCheckBoxes();
}

function DisplayTrafficClick(input) {
    if (input.checked == true) {
        //Need to display the traffic
        setTimeout(function() { ShowMapLegend(); }, 0);
        ClickShowTraffic();
    }
    else {
        //Need to clear the traffic
        setTimeout(function() { HideMapLegend(); }, 0);
        ClickShowTraffic();
    }
}


function DisplayAccidentsClick(input) {
      if (input.checked == true) {
          //Need to display the traffic
          DisplayAccidents();
      }
      else {
          //Need to clear the traffic
          DisplayAccidents();
      }
  }
  
  function DisplayRoadWorksClick(input) {
    if (input.checked == true) {
        //Need to display the traffic
        DisplayRoadworks();
    }
    else {
        //Need to clear the traffic
        DisplayRoadworks();
    }
}

function DisplayCamerasClick(input) {
    if (input.checked == true) {
        //Need to display the traffic
        ClickShowCamera();
    }
    else {
        //Need to clear the traffic
        m_showCameras = 0;
        clearTrafficCameras();
    }
}

function GetMapPosition() {
    var elem = document.getElementById('myGoogleMap');
    //if (m_mapTop == 0) {
        var pos = GetPosition(elem);
        m_mapLeft = pos[0];
        m_mapTop = pos[1];
        return pos;
    //}
    //else {
    //    return [m_mapLeft, m_mapTop]
    //}

}

function GetPosition(obj) {
    var topValue = 0, leftValue = 0;
    while (obj) {
        leftValue += obj.offsetLeft;
        topValue += obj.offsetTop;
        obj = obj.offsetParent;
    }
    finalvalue = [leftValue,topValue];
    return finalvalue;
}

function ShowMapLegend() {
    var pos = GetMapPosition();
    var legend = document.getElementById("trafficlegend");
    legend.style.top = pos[1] + 30;
    if(document.body.leftMargin)
        legend.style.left = (pos[0] - document.body.leftMargin) + (550);
    else
        legend.style.left = (pos[0]) + (550);
        
    legend.style.display = "block";
}

function HideMapLegend() {
    document.getElementById("trafficlegend").style.display = "none";
}

function OnResizeWindow() {
    if (document.getElementById("trafficlegend").style.display == "block") {
        ShowMapLegend();
    }
    if (m_processingMarker != null) {
        RepositionProcessing();
    }
}

function RepositionProcessing() {
    var pos = GetMapPosition();

    m_processingMarker.style.top = pos[1] + 97;
    m_processingMarker.style.left = pos[0] + 150;
}


GEvent.addDomListener(window, "load", GetMap);
GEvent.addDomListener(window, "unload", GUnload);
GEvent.addDomListener(window, "resize", OnResizeWindow);

