﻿//Advanced Route Planning
var isAdvRouteStarted = false;
var isAdvRouteVisible = false;
var startPinID = null;
var thisLine = null;
var advRouteLayer = null;
var allRouteLayer = null;
var returnToAlertWindow = false;

function AdvancedRoutePlanningVisiable(username) {
    var display = true;

    ShowItem("AdvancedRoutePlanning", display);
    ShowItem("AlertEditRoute", display);
    ShowItem("MapControlRouteNames", display);
    PopulateRouteDdl("MapControlRouteNames");
}
//Show/Hide window
function ShowAdvancedRoutePlanning(show, returnToAlert) {
    if (show) {//Show window
        if (!m_bLoggedIn) { AlertMessage("You must be logged in to use this feature."); return; }
        if (m_demoUser || demo2_user) { AlertMessage("Sorry, this feature has been disabled in demonstration mode."); return; }
        hideAlerts();
        fadein("divAdvRouteOverlay");
        ShowHideRouteList(false);
        isAdvRouteVisible = true;
        AdvRouteClear();
        AdvRouteStop();
        ShowAdvancedRouteDelete(false,true);
        PopulateRouteDdl("ddlRouteNames");
    } else {//Hide window
        fadeout("divAdvRouteOverlay");
        isAdvRouteVisible = false;
        AdvRouteStop();
        AdvRouteClear();
        fadeout("divColorPopOverLay");
    }
    returnToAlertWindow = returnToAlert;
}
function ShowAdvancedRouteDelete(value, onlyPoints) {
    if (onlyPoints) {
        document.getElementById("AdvRouteDeleteMessage").innerHTML = "All points for this route will be deleted.  Are you Sure you want to Delete ALL of the points?";
        document.getElementById("AdvRouteDeleteYes").onclick = function() {AdvRouteRemoveAllPoints();};
    } else {
        var m_routeID = document.getElementById("ddlRouteNames");
        var routeID = m_routeID.options[m_routeID.selectedIndex].value;
        if (routeID == -1) { AlertMessage("You must select the route to delete."); return; }
        document.getElementById("AdvRouteDeleteMessage").innerHTML = "The route and all alerts for this route will be deleted.  Are you Sure you want to Delete the route?";
        document.getElementById("AdvRouteDeleteYes").onclick = function() {AdvRouteDelete();};
    }
    if (value) {//Show window
        ShowItemBlock("advRouteEdit",false);
        ShowItemBlock("advRouteDelete",true);
    } else {//Hide window
        ShowItemBlock("advRouteDelete", false);
        ShowItemBlock("advRouteEdit", true);
    }
}

function AdvRouteStart() {
    isAdvRouteStarted = true;
    ShowItemBlock("imgAdvRouteStart", false);
    ShowItemBlock("imgAdvRouteStop", true);
}
function AdvRouteStop() {
    isAdvRouteStarted = false;
    ShowItemBlock("imgAdvRouteStop", false);
    ShowItemBlock("imgAdvRouteStart", true);
}

function LoadAdvancedRoute(routeID) {
    AdvRouteClear();
    if (routeID == -1) {
        var img = document.getElementById("imgAdvRouteStart");
        img.onmousedown = "this.src='./images/StartButton0.gif'";
        img.onmouseout = "this.src='./images/StartButton0.gif'";
        img.onmouseover = "this.src='./images/StartButton1.gif'";
        img.src = "./images/StartButton0.gif";
    } else {
        var img = document.getElementById("imgAdvRouteStart");
        img.onmousedown = "this.src='./images/EditCannedResponses0.png'";
        img.onmouseout = "this.src='./images/EditCannedResponses0.png'";
        img.onmouseover = "this.src='./images/EditCannedResponses1.png'";
        img.src = "./images/EditCannedResponses0.png";
        AdvRouteLoadARoute(routeID);
    }
}
function AdvRouteLoadARoute(routeID) {
    var dtRoute = DAL.GetAdvRoute(routeID);
    var dtRouteDetail = DAL.GetAdvRouteDetail(routeID);
    if (dtRoute.value.Rows.length != 0) {
        with (dtRoute.value.Rows[0]) {
            if (isChecked("radFeet")) {
                document.getElementById("tbRadius").value = Radius;
            } else {
                document.getElementById("tbRadius").value = NumberAlterPrecision(FeetToMeters(Radius), 0, true);
            }
            document.getElementById("tbAMinRadius").value = Radius;
            document.getElementById("tbARadius").value = Radius;
            document.getElementById("AdvRouteName").value = RouteName;
            document.getElementById("tbAdvRouteColor").value = Color;
        }
        if (dtRouteDetail.value.Rows.length != 0) {
            var points = new Array();
            for (var i = 0; i < dtRouteDetail.value.Rows.length; i++) {
                var point = new VELatLong(dtRouteDetail.value.Rows[i].Lat, dtRouteDetail.value.Rows[i].Lon);
                points.push(point);
                AdvRouteAddPointToList(point);
            }
            advRouteLayer = AddLayer("Advanced Route Layer", "Layer contains advanced route.");
            var startPin = AddPushpinToLayer(advRouteLayer, points[0], "./images/redpushpin.gif", true, "", "");
            startPin.Title = "AdvRoutePin";
            startPinID = startPin.GetID();
            if (points.length > 1) {
                thisLine = AddPolyLine(advRouteLayer, points, TBtoColor("tbAdvRouteColor"));
                AdvRouteSetWidth(null, "tbRadius");
            }
            SetMapView(points);
        }
    }
    DisplayMileage();
}
function AdvRouteSave() {
    //Save route information to DB
    var m_lbAdvRoutePointList = document.getElementById("lbAdvRoutePointList");
    var routeName = document.getElementById("AdvRouteName").value;
    var m_routeID = document.getElementById("ddlRouteNames");
    var color = document.getElementById("tbAdvRouteColor").value;
    var routeID = m_routeID.options[m_routeID.selectedIndex].value;
    var radius = AdvRouteGetRadiusFeet("tbRadius");
    if (radius == null) { return; }
    if (routeName == "") { AlertMessage("You must specify a name for the route."); return; }
    if (m_lbAdvRoutePointList.options.length == 0) { AlertMessage("You must include points for the route."); return; }

    var points = new Array();
    for (var x = 0; x < m_lbAdvRoutePointList.options.length; x++) {
        points[x] = m_lbAdvRoutePointList.options[x].text;
    }

    DAL.SaveAdvRoute(m_CurrentUser, routeID, routeName, radius.toString(), color, points);
    //Clear map and listboxes.
    AdvRouteClear();
    AdvRouteStop();
    PopulateRouteDdl("ddlRouteNames");
    __doPostBack(UPRList, m_CurrentUser);
    if (returnToAlertWindow) {
        ShowAdvancedRoutePlanning(false, false);
        openAlerts();
        ShowItemBlock("alertAddRoute", true);
        PopulateRouteDdl("ddlRouteName");
        routeID = SelectIndexOfText("ddlRouteName", routeName);
        LoadAdvancedRoute(routeID);
    }
}

function AdvRouteDelete() {
    var m_routeID = document.getElementById("ddlRouteNames");
    var routeID = m_routeID.options[m_routeID.selectedIndex].value;
    if (routeID == -1) { AlertMessage("You must select the route to delete."); return; }
    var rtn = DAL.DeleteAdvRoute(routeID);
    if(rtn.value){//Route Deleted
        AdvRouteClear();
        AdvRouteStop();
        PopulateRouteDdl("ddlRouteNames");
        ShowAdvancedRouteDelete(false, true);
        __doPostBack(UPRList, m_CurrentUser);
    }else{//Route Not Deleted
        AlertMessage("An unexpected error occurred while attempting to delete this route. Please try again.");
    }
}

function AdvRouteAddPoint(mapX, mapY) {
    var latLon = map.PixelToLatLong(new VEPixel(mapX, mapY));
    var index = document.getElementById("lbAdvRoutePointList").selectedIndex;
    if (index != -1) { index++; }
    AdvRouteInsertPoint(latLon, index);
    DisplayMileage();
}
function AdvRouteInsertPoint(latLon, index){
    AdvRouteDrawPoint(latLon, index);
    AdvRouteAddPointToList(latLon, index);
    lbAdvRoutePointListChange();
    DisplayMileage();
}
function AdvRouteDrawPoint(latLon, index) {
    if (advRouteLayer == null) {
        advRouteLayer = AddLayer("Advanced Route Layer", "Layer contains advanced route.");
        var startPin = AddPushpinToLayer(advRouteLayer, latLon, "./images/redpushpin.gif", true, "", "");
        startPin.Title = "AdvRoutePin";
        startPinID = startPin.GetID();
    } else if (thisLine == null) {
        var startPoint = advRouteLayer.GetShapeByID(startPinID).GetPoints()[0];
        thisLine = AddPolyLine(advRouteLayer, [startPoint, latLon], TBtoColor("tbAdvRouteColor"));
        AdvRouteSetWidth(null, "tbRadius");
    } else {
        AddPoint(thisLine, latLon, index);
        AdvRouteSetWidth(null, "tbRadius");
    }
}
function AdvRoutePointDragEnd(pin) {
    var id = pin.GetID();
    var m_lbAdvRoutePointList = document.getElementById("lbAdvRoutePointList");
    if (m_lbAdvRoutePointList == null) { return; }
    if (id == startPinID) {
        m_lbAdvRoutePointList.options[0].text = NumberAlterPrecision(pin.Latitude, 5, false) + ", " + NumberAlterPrecision(pin.Longitude, 5, false);
        MovePoint(thisLine, new VELatLong(pin.Latitude, pin.Longitude), 0);
        return;
    }
    for (var i = 0; i < m_lbAdvRoutePointList.options.length; i++) {
        if (m_lbAdvRoutePointList.options[i].selectedMarkerID == id) {
            m_lbAdvRoutePointList.options[i].text = NumberAlterPrecision(pin.Latitude, 5, false) + ", " + NumberAlterPrecision(pin.Longitude, 5, false);
            MovePoint(thisLine, new VELatLong(pin.Latitude, pin.Longitude), i);
            if (i == 0) {
                var startPin = advRouteLayer.GetShapeByID(startPinID);
                startPin.SetPoints(new VELatLong(pin.Latitude, pin.Longitude));
            }
            break;
        }
    }
    DisplayMileage();
}
function AdvRouteAddPointToList(latLon, index) {
    var list = document.getElementById("lbAdvRoutePointList");
    if (index == -1) { index = list.options.length; }
    var option = new Option(NumberAlterPrecision(latLon.Latitude, 5, false) + ", " + NumberAlterPrecision(latLon.Longitude, 5, false), index);
    option.selected = true;
    ClearSelected("lbAdvRoutePointList");
    ListInsertItem("lbAdvRoutePointList", option, index);
    if(-1 < index && index < (list.options.length -1)){
        list.value = list.options[index].value;
    }
}

function AdvRouteRemovePoint() {
    var m_lbAdvRoutePointList = document.getElementById("lbAdvRoutePointList");
    if (m_lbAdvRoutePointList == null) { return; }
    if (m_lbAdvRoutePointList.selectedIndex == -1) { return; }
    //Remove selected Point
    while (m_lbAdvRoutePointList.selectedIndex != -1) {
        var index = m_lbAdvRoutePointList.selectedIndex;
        if (m_lbAdvRoutePointList.options[index].selectedMarkerID != null) {
            advRouteLayer.DeleteShape(advRouteLayer.GetShapeByID(m_lbAdvRoutePointList.options[index].selectedMarkerID));
        }
        m_lbAdvRoutePointList.remove(index);
        if (m_lbAdvRoutePointList.options.length < 1) {
            AdvRouteRemoveAllPoints();
        } else if (m_lbAdvRoutePointList.options.length < 2) {
            advRouteLayer.DeleteShape(thisLine);
            thisLine = null;
        } else {
            RemovePoint(thisLine, index);
        }
        if (index == 0 && startPinID) {
            advRouteLayer.DeleteShape(advRouteLayer.GetShapeByID(startPinID));
            if (m_lbAdvRoutePointList.options.length > 0) {
                var s = m_lbAdvRoutePointList.options[0].text.split(",");
                var startPin = advRouteLayer.GetShapeByID(startPinID);
                startPin.SetPoints(new VELatLong(s[0], s[1]));
            }
        }
    }
    DisplayMileage();
}
function AdvRouteClearLayer() {
    startPinID = null;
    thisLine = null;
    RemoveLayer(advRouteLayer);
    advRouteLayer = null;
}
function AdvRouteRemoveAllPoints() {
    ClearList("lbAdvRoutePointList");
    AdvRouteClearLayer();
    ShowAdvancedRouteDelete(false, true);
    DisplayMileage();
}
function AdvRouteClear() {
    AdvRouteRemoveAllPoints();
    CheckUncheckAllRoutes(false);
    ShowHideRouteList(false);
    document.getElementById("tbRadius").value = "300";
    document.getElementById("tbAdvRouteColor").value = "000000";
    document.getElementById("AdvRouteName").value = "";
    DisplayMileage();
}

function AdvRouteShowAllPoints() {
    SelectAllOptions("lbAdvRoutePointList");
    lbAdvRoutePointListChange();
}
function lbAdvRoutePointListChange() {
    var m_lbAdvRoutePointList = document.getElementById("lbAdvRoutePointList");
    if (m_lbAdvRoutePointList == null) { return; }
    if (m_lbAdvRoutePointList.selectedIndex == -1) { return; }
    for (var i = 0; i < m_lbAdvRoutePointList.options.length; i++) {
        if (m_lbAdvRoutePointList.options[i].selected) {//Item is  selected in the list.
            if (m_lbAdvRoutePointList.options[i].selectedMarkerID == null) {
                var s = m_lbAdvRoutePointList.options[i].text.split(",");
                var selectedMarker = AddPushpinToLayer(advRouteLayer, new VELatLong(s[0], s[1]), "./images/AddressMarker.png", true, "", "");
                selectedMarker.Title = "AdvRoutePin";
                m_lbAdvRoutePointList.options[i].selectedMarkerID = selectedMarker.GetID();
                m_lbAdvRoutePointList.options[i].focus();
            }
        } else {
            if (m_lbAdvRoutePointList.options[i].selectedMarkerID != null) {
                advRouteLayer.DeleteShape(advRouteLayer.GetShapeByID(m_lbAdvRoutePointList.options[i].selectedMarkerID));
                m_lbAdvRoutePointList.options[i].selectedMarkerID = null;
            }
        }
    }
}
function HighlightPinInList(markerID) {
    var m_lbAdvRoutePointList = document.getElementById("lbAdvRoutePointList");
    for (var i = 0; i < m_lbAdvRoutePointList.options.length; i++) {
        if (m_lbAdvRoutePointList.options[i].selectedMarkerID == markerID) {
            m_lbAdvRoutePointList.selectedIndex = i;
            lbAdvRoutePointListChange();
            return;
        }
    }
}
function AdvRouteSetWidth(feet, tbID) {
    if (feet == null) { feet = AdvRouteGetRadiusFeet(tbID); }
    if (feet == null) { feet = 100; }
    if (thisLine) {
        var width = GetWidth(map.GetZoomLevel(), feet);
        thisLine.SetLineWidth(width);
        //alert(width.toString() + "~~" + feet.toString() + "~~" + tbID);
    }
}
function AdvRouteGetRadiusFeet(tbID) {
    var m_tbRadius = document.getElementById(tbID);
    var r = m_tbRadius.value;
    if (isNaN(r)) {
        AlertMessage("You must enter a number in the radius field.");
        return null;
    }
    r = NumberAlterPrecision(r, 0, true);
    if ((tbID=="tbRadius" && isChecked("radFeet")) || (tbID == "tbARadius" &&  isChecked("radAFeet"))) {
        if (r < 100) {
            AlertMessage("Radius must not be less than 100 feet.");
            return null;
        } else if (r > 5280) {
            AlertMessage("Radius must not be more than 5280 feet (1 mile).");
            return null;
        }
        return r;
    } else {
        if (r < 30) {
            AlertMessage("Radius must not be less than 30 meters.");
            return null;
        } else if (r > 1609) {
            AlertMessage("Radius must not be more than 1609 meters (1 mile).");
            return null;
        }
        return NumberAlterPrecision(MetersToFeet(r), 0, true);
    }
}
function RadiusToFeet(tbID) {
    //1 meter = 3.2808399 feet
    var r = GetIntFromTextbox(tbID);
    r = NumberAlterPrecision(MetersToFeet(r), 0, true);
    r = (r < 100 ? 100 : r);
    r = (r > 5281 ? 5281 : r);
    document.getElementById(tbID).value = r;
    AdvRouteSetWidth(r, tbID);
    if (tbID == "tbRadius") { DisplayMileage();}
}
function RadiusToMeters(tbID) {
    //1 foot = 0.3048 meters
    var r = GetIntFromTextbox(tbID);
    AdvRouteSetWidth(r, tbID);
    r = NumberAlterPrecision(FeetToMeters(r), 0, true);
    r = (r < 30 ? 30 : r);
    r = (r > 1610 ? 1610 : r);
    document.getElementById(tbID).value = r;
    if (tbID == "tbRadius") { DisplayMileage(); }
}
function GetWidth(zoomLevel, feet) {
    var width = feet / Math.pow(2, (18 - zoomLevel));
    if (width < 2) { width = 2; }
    return width;
}
function RouteColorChanged() {
    if (thisLine) {
        thisLine.SetLineColor(TBtoColor("tbAdvRouteColor"));
    }
}
function PopulateRouteDdl(ddlID) {
    var ddl = document.getElementById(ddlID);
    ddl.options.length = 0;
    var index = 1;
    var routeList = GetRouteList();
    if (routeList == null) { return; }
    routeList = routeList.value;
    if (ddlID == "ddlRouteNames") {
        ddl.options[0] = new Option("New Route", -1);
    } else {
        ddl.options[0] = new Option("Select Route", -1);
    }
    if (ddlID == "MapControlRouteNames") {
        ddl.options[1] = new Option("All Routes", -2);
        index = 2;
    }
    for (var i = 0; i < routeList.Rows.length; i++) {
        ddl.options[index] = new Option(routeList.Rows[i].RouteName, routeList.Rows[i].RouteID);
        index++;
    }
    ddl.selectedIndex = 0;
    LoadAdvancedRoute(-1);
}
function GetRouteList() {
    if (m_CurrentUser != null && m_CurrentUser != '' && m_CurrentUser != -1) {
        var response;
        response = DAL.GetAdvRouteNames(m_CurrentUser);
        return response;
    }
}

function DisplayMileage() {
    var milesOrKilometers = (isChecked("radFeet") ? GeoCodeCalc.EarthRadiusInMiles : GeoCodeCalc.EarthRadiusInKilometers);
    var mileage = 0;
    if (thisLine != null) { mileage = NumberAlterPrecision(CalcMileage(thisLine.GetPoints(), milesOrKilometers), 2, true); }
    document.getElementById("distanceLabel").innerHTML = mileage.toString() + " " + (isChecked("radFeet") ? "Miles" : "Kilometers");
}
function CalcMileage(points, radius) {
    if (points == null) { return 0; }
    var mileage = 0;
    for (var i = 0; i < points.length - 1; i++) {
        mileage += GeoCodeCalc.CalcDistance(points[i].Latitude, points[i].Longitude, points[i + 1].Latitude, points[i + 1].Longitude, radius);
    }
    return mileage;
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Advanced Route Alert
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function AdvRouteAddVehicleToList() {
    //Add selected vehicle from ddlAdvRouteVehicles to lbAdvRouteVehicleList
    AddItemToList("ddlAdvRouteVehicles", "lbAdvRouteVehicleList");
}
function AdvRouteRemoveVehicleFromVehicleList(value) {
    var m_lbAdvRouteVehicleList = document.getElementById("lbAdvRouteVehicleList");
    if (m_lbAdvRouteVehicleList == null) { return; }
    if (value) {
        //Clear list
        m_lbAdvRouteVehicleList.options.length = 0;

    } else {
        //Remove selected vehicle
        if (m_lbAdvRouteVehicleList.selectedIndex != -1) {
            m_lbAdvRouteVehicleList.remove(m_lbAdvRouteVehicleList.selectedIndex);
        }
    }
}
function AlertRadiusChanged() {
    var r = AdvRouteGetRadiusFeet("tbARadius");
    var minRadius = parseInt(document.getElementById("tbAMinRadius").value);

    if (r == null) {
        r = minRadius;
    } 
//    else {
//        var radius = parseInt(r);
//        if (radius < minRadius) {
//            AlertMessage("Notice - alert Deviation is smaller than the Display Width for the route.");
//        }
//    }
    AdvRouteSetWidth(r);
}
function LoadAdvancedRouteAlertVehicles(routeID) {
    var response;
    var m_lbAdvRouteVehicleList = document.getElementById("lbAdvRouteVehicleList");
    m_lbAdvRouteVehicleList.options.length = 0;
    response = DAL.GetAdvRouteVehicles(routeID);
    if (response.value.Rows.length == 0) {
        var m_ddlAdvRouteVehicles = document.getElementById("ddlAdvRouteVehicles");
        for (i = 1; i < m_ddlAdvRouteVehicles.length; i++) {
            m_lbAdvRouteVehicleList.options[m_lbAdvRouteVehicleList.length] = new Option(m_ddlAdvRouteVehicles.options[i].text, m_ddlAdvRouteVehicles.options[i].value);
        }
    } else {
        for (i = 0; i < response.value.Rows.length; i++) {
            m_lbAdvRouteVehicleList.options[m_lbAdvRouteVehicleList.length] = new Option(response.value.Rows[i].VehicleName, response.value.Rows[i].VehicleID);
        }
    }

}

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Advanced Route Display checkboxes.
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
var isAllRoutesChecked = false;

function ShowHideRouteList(Show) {
    if (Show == true && isAdvRouteVisible == true) { AlertMessage("Sorry, you must close the Advanced Route Planner window to use this function."); return; }
    if (Show == true && AlertEditorOpen == true) { AlertMessage("Sorry, you must close the Alert Editor window to use this function."); return; }

    document.getElementById("RouteListTbl").style.visibility = (Show ? "visible" : "hidden");

    document.getElementById("MapControlTbl").style.visibility = (Show ? "hidden" : "visible");
    document.getElementById("sl0slider").style.visibility = (Show ? "hidden" : "visible");

    document.getElementById("RouteListTbl").style.display = (Show ? "block" : "none");

    document.getElementById("MapControlTbl").style.display = (Show ? "none" : "block");
    document.getElementById("sl0slider").style.display = (Show ? "none" : "block");
}

function ShowARoute(routeID) {
    var dtRoute = DAL.GetAdvRoute(routeID);
    var dtRouteDetail = DAL.GetAdvRouteDetail(routeID);
    if (dtRoute.value.Rows.length != 0) {
        if (dtRouteDetail.value.Rows.length != 0) {
            var points = new Array();
            for (var i = 0; i < dtRouteDetail.value.Rows.length; i++) {
                var point = new VELatLong(dtRouteDetail.value.Rows[i].Lat, dtRouteDetail.value.Rows[i].Lon);
                points.push(point);
            }
            if (!isAllRoutesChecked) { SetMapView(points); }
            if (allRouteLayer == null) {
                allRouteLayer = AddLayer("All Advanced Route Layer", "Layer contains all advanced routes for the account.");
            }
            
            var radius = dtRoute.value.Rows[0].Radius;
            var aLine = AddPolyLine(allRouteLayer, points, HextoColor(dtRoute.value.Rows[0].Color));
            var width = GetWidth(map.GetZoomLevel(), radius);
            aLine.SetLineWidth(width);
            aLine.Radius = radius;
            aLine.RouteID = routeID;
        }
    }
}

function RemoveARoute(routeID) {
    if (allRouteLayer == null) { return; }
    for (var i = 0; i < allRouteLayer.GetShapeCount(); i++) {
        if(allRouteLayer.GetShapeByIndex(i).RouteID == routeID){
            shape = allRouteLayer.GetShapeByIndex(i);
            break;
            }
    }
    if (shape == null) { return; }
    allRouteLayer.DeleteShape(shape);
}
function ClearAllRoutes() {
    if (allRouteLayer != null) {
        RemoveLayer(allRouteLayer);
        allRouteLayer = null;
    }
}
function ResizeAllRoutes() {
    var shapeCount = allRouteLayer.GetShapeCount();
    var shape = null;
    var width = 1;
    for (var i = 0; i < shapeCount; i++) {
        shape = allRouteLayer.GetShapeByIndex(i);
        if (shape.Radius != null) {
            width = GetWidth(map.GetZoomLevel(), shape.Radius);
            shape.SetLineWidth(width);
        }
    }
}


function DisplayThisRoute(routeID, value) {
    if (value == true) {
        ShowARoute(routeID);
    } else {
        RemoveARoute(routeID);
        isAllRoutesChecked = false;
    }
    ManageCBAllRoutes();
}
function CheckUncheckAllRoutes(check) {
    isAllRoutesChecked = check;
    var list = document.aspnetForm.RouteCheckboxList;
    if (list == null) { return; }
    for (var i = 0; i < list.length; i++) {
        if (list[i].checked != check) {
            list[i].checked = check;
            DisplayThisRoute(list[i].value, check);
        }
    }
    if (check) {
        SetMapView(allRouteLayer.GetBoundingRectangle());
    } else {
        ClearAllRoutes();
    }
}
function ManageCBAllRoutes() {
    var cb = document.getElementById("CBAllRoutes");
    var list = document.aspnetForm.RouteCheckboxList;
    if (list == null) { return; }
    for (i = 0; i < list.length; i++) {
        if (list[i].checked == false) {
            cb.checked = false;
            return;
        }
    }
    isAllRoutesChecked = true;
    cb.checked = true;
}
