﻿var GMapMain;
var MapMgr;
var InitialX;
var InitialY;
var InitialZ;
var progressBar;
var maxNum;
var num;
var geocoder;
var FoundLocationMarker;
var highlightCircle;
var CirLat=0;
var CirLon=0;
var CirRad=0;
var AllPoints = [];
var batch = [];
var GroupTypes;
var CrimeGroupTypes;
var LiveDate = new Date();
var LiveTime;
var LiveIncs;
var LiveIncResults;
var ActiveTab;
var AGCODE;
var ShowMap;
var MapLoaded;
var PageLoaded;
var myPano;
var StreetViewClient;
var ShowingStreetView;
var t;
var AgencyBounds = "";
var TrafficInfo;

Sys.Application.add_init(AppInit);

window.onresize = function() { AdjustDivs(); }

function AppInit() {
//    Sys.Application.add_load(RunOnce);
}

function RunOnce() {
    // Init Values used by Server
    document.getElementById("hiddenLocDesc").value = "";
    document.getElementById("hiddenLocPoint").value = "";
    document.getElementById("hiddenLocRad").value = "";
    
    LiveIncs = true;
    AGCODE = document.getElementById('MYAGCODE').value;
    ShowMap = document.getElementById('ShowMap').value;
    ActiveTab = document.getElementById('INITIALTAB').value;
    InitialX = document.getElementById('INITIALX').value;
    InitialY = document.getElementById('INITIALY').value;
    InitialZ = document.getElementById('INITIALZOOM').value;
    var MapType = document.getElementById('MAPTYPE').value;
    var MapMessage = document.getElementById('MAPMESSAGE').value;
    var eMailAlerts = document.getElementById('EMAILALERTS').value;
    if (eMailAlerts == 'T') {
        document.getElementById('FooterTextRight').style.display = 'block';
    }
    else {
        document.getElementById('FooterTextRight').style.display = 'none';
    }
    if (ShowMap == 'Y') {
        if (GBrowserIsCompatible()) {
            GMapMain = new GMap2(document.getElementById('MapDiv'));
            GMapMain.setCenter(new google.maps.LatLng(parseFloat(InitialY), parseFloat(InitialX)), parseFloat(InitialZ));
            GMapMain.enableScrollWheelZoom();
            GMapMain.addMapType(G_PHYSICAL_MAP);
            if (MapType == 'G_PHYSICAL_MAP') GMapMain.setMapType(G_PHYSICAL_MAP);
            if (MapType == 'G_NORMAL_MAP') GMapMain.setMapType(G_NORMAL_MAP);
            if (MapType == 'G_HYBRID_MAP') GMapMain.setMapType(G_HYBRID_MAP);
            if (MapType == 'G_SATELLITE_MAP') GMapMain.setMapType(G_SATELLITE_MAP);
            var mapTypeControl = new GMapTypeControl();
            var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(20, 20));
            GMapMain.addControl(mapTypeControl, bottomRight);
            GMapMain.addControl(new GSmallMapControl());
            //var trafficOptions = { incidents: true };
            //TrafficInfo = new GTrafficOverlay(trafficOptions);

        }

        var timeLabel = $get('LiveTime');
        var d = new Date();
        var hours = d.getHours();
        var min = d.getMinutes();
        var dPeriod = CalcAMPM(hours);
        var dHours = CalcHours(hours);
        timeLabel.innerHTML = 'Today at ' + dHours + ':' + LeftPad(min, 2) + dPeriod;
        LiveDate = (d.getMonth() + 1) + '/' + d2(d.getDate()) + '/' + d.getFullYear();
        LiveTime = LeftPad(hours, 2) + LeftPad(min, 2) + '00';

        //Populate Dates for second and third tab
        var StartDate = document.getElementById('txtStartDate');
        var EndDate = document.getElementById('txtEndDate');

        if (document.getElementById('CALLSD')) {
            EndDate.value = document.getElementById('CALLED').value;
            StartDate.value = document.getElementById('CALLSD').value;
        }
        else {
            EndDate.value = LeftPad(d.getMonth() + 1, 2) + "/" + LeftPad(d.getDate(), 2) + "/" + d.getFullYear();
            d.setDate(d.getDate() - 3);
            StartDate.value = LeftPad(d.getMonth() + 1, 2) + "/" + LeftPad(d.getDate(), 2) + "/" + d.getFullYear();
        }
        var dc = new Date();
        StartDate = document.getElementById('txtCrimeStartDate');
        EndDate = document.getElementById('txtCrimeEndDate');
        if (document.getElementById('CRIMESD')) {
            EndDate.value = document.getElementById('CRIMEED').value;
            StartDate.value = document.getElementById('CRIMESD').value;
        }
        else {
            EndDate.value = LeftPad(dc.getMonth() + 1, 2) + "/" + LeftPad(dc.getDate(), 2) + "/" + dc.getFullYear();
            dc.setDate(dc.getDate() - 7);
            StartDate.value = LeftPad(dc.getMonth() + 1, 2) + "/" + LeftPad(dc.getDate(), 2) + "/" + dc.getFullYear();
        }
        GetGroups();
    }

    switch (ActiveTab) {
        case "0":
            setTimeout("ClickLiveCalls()", 2000);
            break;
        case "1":
            setTimeout("ClickHistoricalCalls()", 2000);
            break;
        case "2":
            setTimeout("ClickCrime()", 2000);
            break;
    }

    ShowingStreetView = false;

    // Show Map Message, if exists
    if (MapMessage != "") {
        var txtMapMessage = $get('txtMapMessage');
        txtMapMessage.innerHTML = MapMessage;
        var mpe=$find('MapMessageModalExtender');
        if (mpe) {
            mpe.show();  //Show Map Message
        }
    }
    MapLoaded = true;
    
 //   Sys.Application.remove_load(RunOnce);
}

function Config() {
    RunOnce();
    MapLoaded = false;
    AGCODE = document.getElementById('MYAGCODE').value;
    ShowMap = document.getElementById('ShowMap').value;
    if (!PageLoaded) {
        PageLoaded = true;
    }

    //Setup Analytics

    var firstTracker = _gat._getTracker("UA-13002250-1");
    firstTracker._initData();
    firstTracker._trackPageview();
    if (document.getElementById('GATRACKER').value != '') {
        var secondTracker = _gat._getTracker(document.getElementById('GATRACKER').value);
        secondTracker._setDomainName("none");
        secondTracker._setAllowLinker(true);
        secondTracker._initData();
        secondTracker._trackPageview();
    }
    if (document.getElementById('AGENCYPOLY').value != '') {
        AddAgencyPoly();
    }
}

function disableEnterKey(e) {
    var key;
    if (window.event)
        key = window.event.keyCode; //IE
    else
        key = e.which; //firefox     

    return (key != 13);
}

function AdjustDivs() {
    var windowheight = GetScreenHeight();
    var windowwidth = GetScreenWidth();
    var WarrantGridDiv = document.getElementById("WarrantGridDiv");
    var ArrestGridDiv = document.getElementById("ArrestGridDiv");
    var InmateGridDiv = document.getElementById("InmateGridDiv");
    var SVGridDiv = document.getElementById("SVGridDiv");
    var MPGridDiv = document.getElementById("MPGridDiv");
    var StreetView = document.getElementById("StreetView");
    if (windowheight > 430) {
        StreetView.style.height = GetScreenHeight() - 343 + 'px';
    }
    AdjustDivH(windowheight, SVGridDiv,250);
    AdjustDivH(windowheight, MPGridDiv,250);
    AdjustDivH(windowheight, InmateGridDiv,275);
    AdjustDivH(windowheight, WarrantGridDiv, 275);
    AdjustDivH(windowheight, ArrestGridDiv,275);

    AdjustDivW(windowwidth, SVGridDiv,1100);
    AdjustDivW(windowwidth, MPGridDiv, 1100);
    AdjustDivW(windowwidth, InmateGridDiv, 1100);
    AdjustDivW(windowwidth, WarrantGridDiv, 1300);
    AdjustDivW(windowwidth, ArrestGridDiv, 1300);
}

function AdjustDivH(windowheight, MyDiv, HDiv) {
    if (MyDiv != null) {
        if (windowheight > HDiv) {
            MyDiv.style.height = windowheight - HDiv + 'px';
        }
    }
}

function AdjustDivW(windowwidth, MyDiv, MaxWidth) {
    if (MyDiv != null) {
        if (windowwidth > MaxWidth) {
            MyDiv.style.left = Math.floor((windowwidth - MaxWidth) / 2) + 'px';
            MyDiv.style.right = Math.floor((windowwidth - MaxWidth) / 2) + 'px';
        }
        else if (windowwidth > 50) {
            MyDiv.style.left = 25 + 'px';
            MyDiv.style.right = 25 + 'px';
        }
    }
}

function CalcHours(OldHours) {
    var NewHours;
    if (OldHours > 12) {
        NewHours = OldHours - 12;
    }
    else if (OldHours == 12) {
        NewHours = OldHours;
    }
    else if (OldHours == 0) {
        NewHours = 12;
    }
    else {
        NewHours = OldHours
    }
    return NewHours;
}

function CalcAMPM(Hours) {
    var dPeriod;
    if (Hours >= 12) {
        dPeriod = ' PM';
    }
    else {
        dPeriod = ' AM';
    }
    return dPeriod;
}

function onSliderValueChanged() {
    var SliderValue = document.getElementById('txtSliderBound');
    if (SliderValue != null) {
        var timeLabel = document.getElementById('LiveTime');

        var currValue = 1440 - SliderValue.value + 1;
        var d = new Date();
        var LDate = d2(d.getDate());
        var curr_hour = d.getHours();
        var curr_min = d.getMinutes();
        var DayString = "Today at ";
        if (currValue != 0) {
            var Changehours = Math.floor(currValue / 60);
            var Changeminutes = (currValue % 60);
            var hours = curr_hour - Changehours;
            var minutes = curr_min - Changeminutes;
            if (minutes < 0) {
                minutes = 60 - (Math.abs(minutes));
                hours = hours - 1;
            }
            if (hours < 0) {
                hours = 24 + hours;
                LDate = LDate - 1;
                DayString = "Yesterday at ";
            }
            LiveDate = (d.getMonth() + 1) + '/' + LDate + '/' + d.getFullYear();
            LiveTime = LeftPad(hours,2) +LeftPad(minutes,2) + '00';
            var dPeriod = CalcAMPM(hours);
            var dHours = CalcHours(hours);
            timeLabel.innerHTML = DayString + dHours + ':' + LeftPad(minutes, 2) + dPeriod;
        }
        else {
            LiveDate = (d.getMonth() + 1) + '/' + LDate + '/' + d.getFullYear();
            LiveTime = LeftPad(curr_hour,2) + LeftPad(curr_min,2) + '00';
            if (hours > 12) {
                dHours = hours - 12;
                dPeriod = ' PM';
            }
            else if (hours == 12) {
                dHours = hours;
                dPeriod = ' PM';
            }
            else if (hours == 0) {
                dHours = 12;
                dPeriod = ' AM';
            }
            else {
                dHours = hours
                dPeriod = ' AM';
            }
            timeLabel.innerHTML = DayString + dHours + ':' + LeftPad(minutes, 2) + dPeriod;
        }
        CreateMarkers(LiveIncResults);
    }
}


function GetGroups() {
    webMap.MapData.GetIncTypes(AGCODE, GetGroupsComplete, RequestFailed);
}

function GetGroupsComplete(results) {
    GroupTypes = results;
    ShowGroupTypes(GroupTypes, 'GroupTypesList', 'GroupList');
    webMap.MapData.GetCrimeTypes(AGCODE, GetCrimeGroupsComplete, RequestFailed);
}

function GetCrimeGroupsComplete(results) {
    CrimeGroupTypes = results;
    ShowGroupTypes(CrimeGroupTypes, 'CrimeGroupTypesList', 'CrimeGroupList');
}

function ShowGroupTypes(GroupTypes, GroupDiv, GroupList) {
    // Populate Group Selection
    var GroupTypesList = document.getElementById(GroupDiv);
    var TypeHTML = '';

    for (i = 0; i <= GroupTypes.length - 1; i++) {
        var divcheck = document.createElement('div');
        divcheck.setAttribute('style', 'overflow:hidden; white-space:nowrap;float:left;width:190px;color:#194E76;');
        divcheck.innerHTML = '<img src="Images/icons/' + GroupTypes[i].ICONURL + '" />';
        var currentElement = document.createElement('input');
        currentElement.setAttribute('type', 'checkbox');
        currentElement.setAttribute('name', GroupList);
        currentElement.setAttribute('id', GroupList);
        currentElement.setAttribute('value', GroupTypes[i].GROUPNAME);
        divcheck.appendChild(currentElement);
        divcheck.appendChild(document.createTextNode(GroupTypes[i].GROUPDESCRIPTION));
        GroupTypesList.appendChild(divcheck);
    }
    var CheckBoxes = document.getElementsByName(GroupList);
    for (var i = 0; i < CheckBoxes.length; i++) {
        CheckBoxes[i].checked = true;
    }
}

function showAddress(address) {
    geocoder = new GClientGeocoder();
    if (AgencyBounds != "")
        geocoder.setViewport(AgencyBounds);
    if (address.indexOf(",") == -1) {
        address = address + ", " + document.getElementById('LOCATIONDEFAULTCITY').value;
    }
    if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
              if (!point) {
                  alert(address + " not found");
              }
              else {
                  GMapMain.setCenter(point, 15);
                  var icon = new GIcon();
                  icon.image = "/Images/icons/FoundLocation.png";
                  icon.shadow = "/Images/icons/shadow-FoundLocation.png";
                  icon.iconSize = new GSize(32.0, 37.0);
                  icon.shadowSize = new GSize(51.0, 37.0);
                  icon.iconAnchor = new GPoint(16.0, 18.0);
                  icon.infoWindowAnchor = new GPoint(16.0, 18.0);
                  var MarkerOptions = { icon: icon };
                  FoundLocationMarker = new GMarker(point, MarkerOptions);
                  GMapMain.addOverlay(FoundLocationMarker);
                  MapMgr.refresh();
                  mydiv = document.getElementById("pnlLocationSearch");
                  mydiv.style.display = "none";
                  mydiv = document.getElementById("pnlLocation");
                  mydiv.style.display = "block";

                  // Save value to be used by Registration Hyperlink
                  document.getElementById("hiddenLocPoint").value = point.x + ',' + point.y;
                  document.getElementById("hiddenLocDesc").value = address;
                  
                  var lblLocation = document.getElementById("FoundLocation");
                  lblLocation.innerHTML = "<IMG SRC='/Images/icons/FoundLocation.png' ALT='Location Image' class='textmiddle'  />" + "  " + address;
              }
          }
        );
    }
}

function PopDates(NumofDays, Refresh) {
    var d = new Date();
    var StartDate;
    var EndDate;
    if (ActiveTab == "1") {
        StartDate = document.getElementById('txtStartDate');
        EndDate = document.getElementById('txtEndDate');
    }
    else if (ActiveTab == "2") {
        StartDate = document.getElementById('txtCrimeStartDate');
        EndDate = document.getElementById('txtCrimeEndDate');
    }
    EndDate.value = LeftPad(d.getMonth() + 1,2) + "/" + LeftPad(d.getDate(),2) + "/" + d.getFullYear();
    d.setDate(d.getDate() - NumofDays);
    StartDate.value = LeftPad(d.getMonth() + 1,2) + "/" + LeftPad(d.getDate(),2) + "/" + d.getFullYear();
    if (Refresh) {
        GetMapPoints();
    }
}

function CheckTheBoxes(Check) {
    var CheckBoxes;
    if (ActiveTab == "0" || ActiveTab == "1") {
        CheckBoxes = document.getElementsByName("GroupList");
    }
    else CheckBoxes = document.getElementsByName("CrimeGroupList");
    for (var i = 0; i < CheckBoxes.length; i++) {
        if (Check == 'ALL') {
            CheckBoxes[i].checked = true;
        }
        else CheckBoxes[i].checked = false;
    }
}

function RemoveFoundLocation() {
    var myadd = document.getElementById('addr');
    if (highlightCircle) {
        GMapMain.removeOverlay(highlightCircle);
        highlightCircle = null;
    }
    MapMgr.clearMarkers();
    GetMapPoints();
    myadd.value = "";
    GMapMain.removeOverlay(FoundLocationMarker);
    mydiv = document.getElementById("pnlLocationSearch");
    mydiv.style.display = "block";
    mydiv = document.getElementById("pnlLocation");
    mydiv.style.display = "none";
    var lblLocation = document.getElementById("FoundLocation");
    lblLocation.innerHTML = "";
}

function SearchwithDates() {
    if (!isValidDate(document.getElementById('txtStartDate').value)
        || !isValidDate(document.getElementById('txtEndDate').value)) {
        document.getElementById("lblDateError").innerHTML = 'Date is not valid.';
    }
    else {
        GetMapPoints();
    }
}

function GetMapPoints() {
    var FooterTextLeft = document.getElementById("FooterTextLeft");
    var GroupTypes = "";
    var CheckBoxes;
    if (!highlightCircle) {
        CirLat = 0;
        CirLon = 0;
        CirRad = 0;
    }
    document.getElementById("lblDateError").innerHTML = '';
    if (ActiveTab == "0" || ActiveTab == "1") {
        FooterTextLeft.innerHTML = "Searching for Calls for Service...";
        CheckBoxes = document.getElementsByName('GroupList');
        for (var i = 0; i < CheckBoxes.length; i++) {
            if (CheckBoxes[i].checked) {
                GroupTypes = GroupTypes + CheckBoxes[i].value.toUpperCase() + ",";
            }
        }
        if (GroupTypes != "") {
            GroupTypes = GroupTypes.slice(0, -1);
        }
        if (ActiveTab == "1") {
            StartDate = document.getElementById('txtStartDate').value;
            EndDate = document.getElementById('txtEndDate').value;
            webMap.MapData.GetMapPoints(AGCODE, StartDate, EndDate, 'I', GroupTypes, CirLat, CirLon, CirRad, OnWSRequestComplete, RequestFailed);
        }
        else {
            webMap.MapData.GetLiveMapPoints(AGCODE, GroupTypes, CirLat, CirLon, CirRad, OnLiveRequestComplete, RequestFailed);
        }
    }
    else {
        FooterTextLeft.innerHTML = "Searching for Crime...";
        CheckBoxes = document.getElementsByName('CrimeGroupList');
        for (i = 0; i < CheckBoxes.length; i++) {
            if (CheckBoxes[i].checked) {
                GroupTypes = GroupTypes + CheckBoxes[i].value + ",";
            }
        }
        if (GroupTypes != "") {
            GroupTypes = GroupTypes.slice(0, -1);
        }
        StartDate = document.getElementById('txtCrimeStartDate').value;
        EndDate = document.getElementById('txtCrimeEndDate').value;
        webMap.MapData.GetMapPoints(AGCODE, StartDate, EndDate, 'C', GroupTypes, CirLat, CirLon, CirRad, OnWSRequestComplete, RequestFailed);
    }
}

function OnWSRequestComplete(results) {
    if (results != null) {
        CreateMarkers(results);
    }
}

function OnLiveRequestComplete(results) {
    if (results != null) {
        LiveIncResults = results;
        CreateMarkers(LiveIncResults);
    }
}

function CreateMarkers(results) {
    if (results != null) {
        if (MapMgr) {
            MapMgr.clearMarkers();
        }
        var FooterTextLeft = document.getElementById("FooterTextLeft");
        var FooterTextRight = document.getElementById("FooterTextRight");
        var ResultsLength = results.length;
        if (ResultsLength == 1) {
            try {
                var Message = results[0].Title;
                var ErrorPos = Message.indexOf("Too Many Records");
            }
            catch (Error) {
            }
        }
        if ((ResultsLength == 1) && (ErrorPos > 0)) {
            FooterTextLeft.innerHTML = "More than 500 Records found!  Decrease the number of days or select fewer types.";
        }
        else {
            maxNum = ResultsLength;
            num = 0;
            var mgrOptions = { borderPadding: 0, maxZoom: 15, trackMarkers: true };
            MapMgr = new MarkerManager(GMapMain, mgrOptions);
            AllPoints.length = 0;
            batch.length = 0;
            for (i = 0; i <= results.length - 1; i++) {
                var AddMarker = true;
                var point = new GLatLng(results[i].Latitude, results[i].Longitude);
                var marker = createMarker(point, results[i].Description, results[i].Icon, results[i].Shadow);
                if (ActiveTab == "0") {
                    var sTimeOpened = results[i].TimeOpened.replace(/:/g, '');
                    var sTimeClosed = results[i].TimeClosed.replace(/:/g, '');
                    // Get rid of incs that were not active at LiveDate/LiveTime
                    if ((new Date(results[i].DateOpened) > new Date(LiveDate)) ||
                    (new Date(LiveDate) > new Date(results[i].DateClosed))) {
                        AddMarker = false;
                    }
                    if ((new Date(results[i].DateOpened).toDateString() == new Date(LiveDate).toDateString()) &&
                    (sTimeOpened > LiveTime)) {
                        AddMarker = false;
                    }
                    if (results[i].Status == 'C') {
                        if ((new Date(results[i].DateClosed).toDateString() == new Date(LiveDate).toDateString()) &&
                        (sTimeClosed < LiveTime)) {
                            AddMarker = false;
                        }
                    }
                }
                if (AddMarker) {
                    batch.push(marker);
                    AllPoints.push(marker);
                }
            }
            var SearchType;
            var MultipleEventIcon;
            if (ActiveTab == "0" || ActiveTab == "1") {
                SearchType = "Call";
                MultipleEventIcon = "/Images/icons/blue/blank.png";
            }
            else {
                SearchType = "Crime";
                MultipleEventIcon = "/Images/icons/red/blank.png";
            }
            GEvent.addListener(MapMgr, "changed",
                function(bounds, markerCount) {
                    if (markerCount == 1) {
                        FooterTextLeft.innerHTML = markerCount + ' ' + 'Location Found  (Blank Icons ' +
                        '<img src="' + MultipleEventIcon + '" alt="Location Icon" border="0" height="17px" width="10px" />' +
                        ' Represent Multiple ' + SearchType + 's at the Same Location)';
                    }
                    else {
                        FooterTextLeft.innerHTML = markerCount + ' ' + 'Locations Founds  (Blank Icons ' +
                        '<img src="' + MultipleEventIcon + '" alt="Location Icon" border="0" height="17px" width="10px" />' +
                        ' Represent Multiple ' + SearchType + 's at the Same Location)';
                    }
                });
            MapMgr.addMarkers(batch, 1);
            MapMgr.refresh();
        }
    }
}

function RequestFailed(error) {
    //Attempt again...
    //GetMapPoints();
}

function IncProgress() {
    progressBar.updateLoader(1);
}

function createMarker(point, html, Icon, Shadow) {
    num++;
    var icon = new GIcon();
    icon.image = "/Images/icons/" + Icon;
    icon.shadow = "/Images/icons/" + Shadow;
    icon.iconSize = new GSize(20.0, 34.0);
    icon.shadowSize = new GSize(20.0, 34.0);
    icon.iconAnchor = new GPoint(16.0, 18.0);
    icon.infoWindowAnchor = new GPoint(16.0, 18.0);
    var MarkerOptions = { icon: icon };
    var marker = new GMarker(point, MarkerOptions);
    GEvent.addListener(marker, "click", function() {
        var StreetView = document.getElementById('STREETVIEW').value;
        var StreetViewDiv = document.getElementById('StreetView');
        if (StreetView == "T") {
            StreetViewDiv.innerhtml = "";
            StreetViewClient = new GStreetviewClient();
            var StreetViewClientClientCallback = function(latlng) {
                if (latlng != null) {
                    ShowingStreetView = true;
                    panoramaOptions = {
                        latlng: point,
                        'features': {
                            'userPhotos': false
                        }
                    };
                    mydiv = document.getElementById("SidePanel");
                    mydiv.style.display = "block";
                    mydiv = document.getElementById("MapDiv");
                    mydiv.style.left = "405px";
                    StreetViewDiv.style.height = GetScreenHeight() - 345 + 'px';
                    if (myPano) myPano.remove();
                    myPano = new GStreetviewPanorama(StreetViewDiv, panoramaOptions);
                    GEvent.addListener(myPano, "error", handleNoFlash);
                }
            }
            StreetViewClient.getNearestPanoramaLatLng(point, StreetViewClientClientCallback);
        }
        var StyledHTML = '<div class="MapInfo">' + html + '</div>';
        marker.openInfoWindowHtml(StyledHTML);
        GMapMain.panTo(point);
    });
    GEvent.addListener(GMapMain.getInfoWindow(), "closeclick", function() {
        var StreetView = document.getElementById('STREETVIEW').value;
        if (StreetView == "T") {
            CloseStreetView();
        }
    });
    return marker;
}

function CloseStreetView() {
    if (myPano) myPano.remove();
    var StreetView = document.getElementById('STREETVIEW').value;
    ShowingStreetView = false;
    StreetView.innerHTML = "";
    mydiv = document.getElementById("SidePanel");
    mydiv.style.display = "none";
    mydiv = document.getElementById("MapDiv");
    mydiv.style.left = "5px";
    GMapMain.checkResize();

}

function DrawCircle(Radius) {
    if (Radius != 0) {
        var center = GMapMain.getCenter();
        var polyPoints = Array();

        if (highlightCircle) {
            GMapMain.removeOverlay(highlightCircle);
        }
        with (Math) {
            var d = Radius / 3963.189; // radians
            var lat1 = (PI / 180) * center.lat(); // radians
            var lng1 = (PI / 180) * center.lng(); // radians
            //Save center to retrieve data later
            CirLat = center.lat();
            CirLon = center.lng();
            CirRad = Radius;            
            for (var a = 0; a < 361; a++) {
                var tc = (PI / 180) * a;
                var y = asin(sin(lat1) * cos(d) + cos(lat1) * sin(d) * cos(tc));
                var dlng = atan2(sin(tc) * sin(d) * cos(lat1), cos(d) - sin(lat1) * sin(y));
                var x = ((lng1 - dlng + PI) % (2 * PI)) - PI; // MOD function
                var point = new GLatLng(parseFloat(y * (180 / PI)), parseFloat(x * (180 / PI)));
                polyPoints.push(point);
            }
        }
       
        var LocationText;
        switch (Radius) {
            case ".28409":
                LocationText = "500 Yard";
                break;
            case ".5681":
                LocationText = "1000 Yard";
                break;
            case "1":
                LocationText = "1 Mile";
                break;
            case "2":
                LocationText = "2 Mile";
                break;
            case "3":
                LocationText = "3 Mile";
                break;
        }
        // Save value to be used by Registration Hyperlink
        document.getElementById("hiddenLocRad").value = Radius;
        document.getElementById("hiddenLocDesc").value = LocationText + " radius of " + document.getElementById("hiddenLocDesc").value;

        highlightCircle = new GPolygon(polyPoints, "#000000", 2, 0.0, "#0000FF", .2);
        GMapMain.addOverlay(highlightCircle);
        if (Radius < 1) {
            GMapMain.setZoom(15);
        }
        else if (Radius < 2) {
            GMapMain.setZoom(14);
        }
        else if (Radius < 3) {
            GMapMain.setZoom(13);
        }
        else GMapMain.setZoom(12);

        MapMgr.clearMarkers();
        GetMapPoints();
    }
}

function GetScreenWidth() {
    if (window.innerWidth)
        theWidth = window.innerWidth;
    else if (document.documentElement && document.documentElement.clientWidth)
        theWidth = document.documentElement.clientWidth;
    else if (document.body)
        theWidth = document.body.clientWidth;

    return theWidth;
}

function GetScreenHeight() {
    if (window.innerHeight)
        theHeight = window.innerHeight;
    else if (document.documentElement && document.documentElement.clientHeight)
        theHeight = document.documentElement.clientHeight;
    else if (document.body)
        theHeight = document.body.clientHeight;
    return theHeight;
}

function ExpandTypesRight() {
    var TypesRight = document.getElementById("Types");
    var GroupTypesList;
    if (ActiveTab == "0" || ActiveTab == "1") GroupTypesList = document.getElementById("GroupTypesList")
    else GroupTypesList = document.getElementById("CrimeGroupTypesList");
    if (document.getElementById("TypesExpandImage").src.indexOf("Images/expand.gif") > 0) {  //Expand the box
        document.getElementById("TypesExpandImage").src = "Images/collapse.gif";
        TypesRight.style.height = GetScreenHeight() - 170 + "px";
        GroupTypesList.style.height = GetScreenHeight() - 230 + "px";
    }
    else {                                                                          //Collapse the box
        document.getElementById("TypesExpandImage").src = "Images/expand.gif";
        TypesRight.style.height = "150px";
        GroupTypesList.style.height = "100px";
    }
}

function LeftPad(n, totalDigits) {
    var result = '';
    if (n != null) {
        n = n.toString();
        var pd = '';
        if (totalDigits > n.length) {
            for (i = 0; i < (totalDigits - n.length); i++) {
                pd += '0';
            }
        }
        result = pd + n.toString();
    }
    return result;
}

function d2(val) {
    return (val < 10) ? '0' + val : val;
}


function clone_obj(obj) {
    var c = {};
    for (var i in obj) {
        var prop = obj[i];
        if (typeof prop == 'object') {
            c[i] = clone_obj(prop);
        } else {
            c[i] = prop;
        }
    }
    return c;
}

function ClickLiveCalls() {
    //GMapMain.addOverlay(TrafficInfo);
    ActiveTab = "0";
    ClearMenuClass();
    document.getElementById('Menu0').className = "Active";
    showdiv('LiveCallsDates');
    hidediv('HistoricalCallsDates');
    hidediv('CrimeDates');
    showdiv('Location');
    showdiv('Types');
    showdiv('MapDiv');
    GMapMain.checkResize();
    showdiv('FooterDiv')
    hidediv('CrimeGroupTypesList');
    showdiv('GroupTypesList');
    document.getElementById('LocationHeading').innerHTML = 'Location of Call';
    document.getElementById('FoundLocationText').innerHTML = 'Find all Calls within ';
    document.getElementById('TypesHeadingText').innerHTML = 'Types of Calls';
    if (ShowingStreetView) CloseStreetView();
    GetMapPoints();
}

function ClickHistoricalCalls() {
    //GMapMain.removeOverlay(TrafficInfo);
    ActiveTab = "1";
    ClearMenuClass();
    document.getElementById('Menu1').className = "Active";
    hidediv('LiveCallsDates');
    showdiv('HistoricalCallsDates');
    hidediv('CrimeDates');
    showdiv('Location');
    showdiv('Types');
    showdiv('MapDiv');
    GMapMain.checkResize();
    showdiv('FooterDiv')
    hidediv('CrimeGroupTypesList');
    showdiv('GroupTypesList');
    document.getElementById('LocationHeading').innerHTML = 'Location of Call';
    document.getElementById('FoundLocationText').innerHTML = 'Find all Calls within ';
    document.getElementById('TypesHeadingText').innerHTML = 'Types of Calls';
    if (ShowingStreetView) CloseStreetView();
    GetMapPoints();
}
function ClickCrime() {
    //GMapMain.removeOverlay(TrafficInfo);
    ActiveTab = "2";
    ClearMenuClass();
    document.getElementById('Menu2').className = "Active";
    hidediv('LiveCallsDates');
    hidediv('HistoricalCallsDates');
    showdiv('CrimeDates');
    showdiv('Location');
    showdiv('Types');
    showdiv('MapDiv');
    GMapMain.checkResize();
    showdiv('FooterDiv')
    showdiv('CrimeGroupTypesList');
    hidediv('GroupTypesList');
    document.getElementById('LocationHeading').innerHTML = 'Location of Crime';
    document.getElementById('FoundLocationText').innerHTML = 'Find all Crime within ';
    document.getElementById('TypesHeadingText').innerHTML = 'Types of Crime';
    if (ShowingStreetView) CloseStreetView();
    GetMapPoints();
}

function HideMapComponents() {
    if (ShowingStreetView) CloseStreetView();
    hidediv('LiveCallsDates');
    hidediv('HistoricalCallsDates');
    hidediv('CrimeDates');
    hidediv('Location');
    hidediv('Types');
    hidediv('SidePanel');
    hidediv('MapDiv');
    var FooterTextLeft = document.getElementById("FooterTextLeft");
    FooterTextLeft.innerHTML = '';
}

function hidediv(DivName) {
    document.getElementById(DivName).style.display = 'none';
    GMapMain.setCenter((new google.maps.LatLng(InitialY, InitialX)), InitialZ);
}

function showdiv(DivName) {
    document.getElementById(DivName).style.display = 'block';
}

function ClearMenuClass() {
    var MenuObject;
    MenuObject = document.getElementById('Menu0');
    if (MenuObject != null) MenuObject.className = "";
    MenuObject = document.getElementById('Menu1');
    if (MenuObject != null) MenuObject.className = "";
    MenuObject = document.getElementById('Menu2');
    if (MenuObject != null) MenuObject.className = "";
    MenuObject = document.getElementById('Menu3');
    if (MenuObject != null) MenuObject.className = "";
    MenuObject = document.getElementById('Menu4');
    if (MenuObject != null) MenuObject.className = "";
    MenuObject = document.getElementById('Menu5');
    if (MenuObject != null) MenuObject.className = "";
    MenuObject = document.getElementById('Menu6');
    if (MenuObject != null) MenuObject.className = "";
    MenuObject = document.getElementById('Menu7');
    if (MenuObject != null) MenuObject.className = "";
    MenuObject = document.getElementById('Menu8');
    if (MenuObject != null) MenuObject.className = "";
    MenuObject = document.getElementById('Menu9');
    if (MenuObject != null) MenuObject.className = "";
    MenuObject = document.getElementById('Menu10');
    if (MenuObject != null) MenuObject.className = "";
    MenuObject = document.getElementById('Menu11');
    if (MenuObject != null) MenuObject.className = "";
}

function onGridCallback(sender, args) {
    sender.GridBodyContainer.firstChild.scrollLeft = 0;

}

function handleNoFlash(errorCode) {
    if (errorCode == 603) {
        var StreetView = document.getElementById('STREETVIEW');
        StreetView.value = "F";
        alert("Error: Flash doesn't appear to be supported by your browser.  Streetview will not be available.");
        CloseStreetView();
        return;
    }
}

function scrollSelectedRecord() {
    if (typeof (gvInmates) == 'undefined') {
        t = window.setTimeout("scrollSelectedRecord()", 500);
        return;
    }
    if (gvInmates != null) {
        if (gvInmates.Rows != null) {
            if (gvInmates.PageSelectedRecords != null && gvInmates.PageSelectedRecords.length > 0) {
                for (var i = 0; i < gvInmates.Rows.length; i++) {
                    if (gvInmates.Rows[i].Cells['BOOKNO'].Value ==
                                            gvInmates.PageSelectedRecords[0].PrimaryKeyColumn) {
                        gvInmates.GridBodyContainer.firstChild.firstChild.childNodes[1].childNodes[i].scrollIntoView(true);
                    }
                }
            }
        } else {
            t = window.setTimeout("scrollSelectedRecord()", 500);
            return;
        }
        window.clearTimeout(t);
    }
}

function AddAgencyPoly() {
    var color = "blue";
    var APoly;
    var Agency = document.getElementById('AGENCYPOLY').value;
    var AgencyPolys=new Array();
    AgencyPolys = Agency.split(',');

    for (i = 0; i <= AgencyPolys.length - 1; i++) {
        APoly = AgencyPolys[i];
        var cnt = new GPolygon.fromEncoded({ polylines: [{
            color: "blue",
            weight: 3,
            opacity: 1.0,
            points: Agency_shapes[APoly].encoded_pos,
            zoomFactor: 32,
            levels: Agency_shapes[APoly].encoded_levels,
            numLevels: 4}],
            fill: false, color: color, opacity: 0.5, outline: true
        });
        AgencyBounds = cnt.getBounds();
        GMapMain.addOverlay(cnt);
    }
}







