﻿var graphicOnclick;

function showWorking() {
    var ldiv = dojo.byId("divWorking");
    if (ldiv.style.visibility != "visible") {
        ldiv.style.visibility = "visible";
        dojo.byId("lblWorking").style.visibility = "visible";
    }
}

function hideWorking() {
    var ldiv = dojo.byId("divWorking");
    if (ldiv.style.visibility != "hidden") {
        ldiv.style.visibility = "hidden";
        dojo.byId("lblWorking").style.visibility = "hidden";
    }
}

function errorWin(desc, func) {
    var txt = "";
    txt = "There was an error on this page.\n\n";
    txt += "Error description: " + desc + "\n\n";
    txt += "Function: " + func + "\n\n";
    txt += "Click OK to continue.\n\n";
    alert(txt);
    loading.style.visibility = "hidden";
    var t = setTimeout(function() { hideWorking() }, 1000);
}

function rightPaneMin() {
    var n = dijit.byId("bcRight").domNode;
    dojo.animateProperty({
        node: n,
        duration: 1000,
        properties: { width: { end: 24, units: "px"} },
        onEnd: function() {
            dijit.byId("mainWindow").layout();
            var cpane = dojo.byId("divTableBar");
            cpane.style.visibility = "hidden";
            //cpane.className = "myhide";
            var rpane = dojo.byId("divTableBody");
            rpane.style.visibility = "hidden";
            var tpane = dojo.byId("rightPaneTitleBar");
            tpane.style.visibility = "hidden";
            if (cadMap != "") {
                var cadResults = document.getElementById("divBodyBar_CAD");
                if (cadResults) {
                    cadResults.style.visibility = "hidden";
                    dojo.byId("divTableBody_CAD").style.visibility = "hidden";
                }
            }
            var mpane = dojo.byId("minimizedRightPane");
            mpane.className = "myshow";
        }
    }).play(1);
}

function rightPaneNormal() {
    var n = dijit.byId("bcRight").domNode;
    dojo.animateProperty({
        node: n,
        duration: 1000,
        properties: { width: { end: 25, units: "%"} },
        onEnd: function() {
            dijit.byId("mainWindow").layout();
            var mpane = dojo.byId("minimizedRightPane");
            mpane.className = "myhide";
            var tpane = dojo.byId("rightPaneTitleBar");
            tpane.style.visibility = "visible";
            var rpane = dojo.byId("divTableBar");
            rpane.style.visibility = "visible";
            var cpane = dojo.byId("divTableBody");
            cpane.style.visibility = "visible";
            if (cadMap != "") {
                var cadResults = document.getElementById("divBodyBar_CAD");
                if (cadResults) {
                    cadResults.style.visibility = "visible";
                    dojo.byId("divTableBody_CAD").style.visibility = "visible";
                }
            }
        }
    }).play(1);
}

function rightPaneMax() {
    var n = dijit.byId("bcRight").domNode;
    dojo.animateProperty({
        node: n,
        duration: 1000,
        properties: { width: { end: 50, units: "%"} },
        onEnd: function() {
            dijit.byId("mainWindow").layout();
        }
    }).play(1);
}

function zoomToInitialExtent() {
    ext = new esri.geometry.Extent(XMin, YMin, XMax, YMax, new esri.SpatialReference({ wkid: parseInt(refScale_baseMap) }));
    map.setExtent(ext);
}

function setIdentifyProcedure() {
    graphicOnclick = dojo.connect(map.graphics, "onClick", function(evt) {
        if (activeTool != "identify") { return; }
        map.infoWindow.hide();

        var pnt = new esri.geometry.Point();
        pnt = evt.mapPoint;
        var ext;
        if (refScale_baseMap == 4326) {
            ext = new esri.geometry.Extent(pnt.x - 0.0002, pnt.y - 0.0002, pnt.x + 0.0002, pnt.y + 0.0002, new esri.SpatialReference({ wkid: parseInt(refScale_baseMap) }));
        }
        else {
            ext = new esri.geometry.Extent(pnt.x - 20, pnt.y - 20, pnt.x + 20, pnt.y + 20, new esri.SpatialReference({ wkid: parseInt(refScale_baseMap) }));
        }

        var graphics = map.graphics.graphics;
        var results = [];
        var graphic;
        var j = 1;
        for (var i = 0, il = graphics.length; i < il; i++) {
            graphic = graphics[i];

            //if point is contained within extent, highlight it and add for display in results list
            if (ext.contains(graphic.geometry)) {
                var title = graphic.getTitle();
                if (title == "Identify Information") {
                    if (graphic.getContent() != "") {
                        var hd = "<tr><td bgcolor='#FF9933'>Record " + j + "</td></tr>";
                        j += 1;
                        results.push(hd + "<tr><td bgcolor='White'>" + graphic.getContent() + "</td></tr>");
                    }
                }
            }
        }

        if (j > 1) {
            map.infoWindow.setTitle(title + " (" + (j - 1) + ")");
            map.infoWindow.setContent("<table width='100%'><tbody>" + results.join("") + "</tbody></table>");
            map.infoWindow.show(evt.screenPoint, map.getInfoWindowAnchor(evt.screenPoint));
        }
        else {
            map.infoWindow.hide();
        }
    });
}

function sliderChange(value) {
    dojo.byId("sliderValue").value = roundNumber(value, 0);
}

function sliderValueChange(value) {
    //NOT USED
    dojo.byId("horizontalSlider").intermediateChanges = false;
    dojo.byId("horizontalSlider").value = roundNumber(value, 0);
    dojo.byId("horizontalSlider").intermediateChanges = true;
}

function clearSelections() {
    try {
        resetSummaries();
        clearTables();
        map.graphics.clear();
        grphjson = null;
        printCrimes = null;
        selectedLocation = new Array();
        map.graphics.disableMouseEvents();
        map.infoWindow.hide();
    }
    catch (err) {
        errorWin(err.description, "clearSelections");
    }
}

function clearTables() {
    try {
        // get the reference for result table and delete
        var myDiv = document.getElementById("divTableBody");
        var oldTable = document.getElementById("tableOne");

        if (oldTable != null) {
            myDiv.removeChild(oldTable);
        }

        if (cadMap != "") {
            var myDiv = document.getElementById("divTableBody_CAD");
            var oldTable = document.getElementById("tableTwo");

            if (oldTable != null) {
                myDiv.removeChild(oldTable);
            }
        }

        // get the reference for summary table and delete
        var myDiv = document.getElementById("divSummaryRMS");
        var oldTable = document.getElementById("tableSummary_RMS");

        if (oldTable != null) {
            myDiv.removeChild(oldTable);
        }

        document.getElementById("tipSummaryRMS").style.visibility = "hidden";
        document.getElementById("tipCSV").style.visibility = "hidden";

        if (cadMap != "") {
            var myDiv = document.getElementById("divSummaryCAD");
            var oldTable = document.getElementById("tableSummary_CAD");

            if (oldTable != null) {
                myDiv.removeChild(oldTable);
            }
            document.getElementById("tipSummaryCAD").style.visibility = "hidden";
            document.getElementById("tipCSV_CAD").style.visibility = "hidden";
        }
    }
    catch (err) {
        errorWin(err.description, "clearTables");
    }
}

function setTitleBar() {
    try {
        var logo = document.getElementById("imgLogo");
        logo.src = "images/" + badgeLogoName;
        var thetitle = document.getElementById("pageTitle");
        thetitle.innerHTML = orgDepartment;
        var thewww = document.getElementById("deptlink");
        thewww.innerHTML = homePage;
        thewww.href = "http://" + homePageLink;

        if (showAdvancedDate == false) {
            dojo.byId("tipAdvancedDates").style.display = "none";
            dojo.byId("advancedDateTime").style.display = "none";
        }
        else {
            dojo.byId("advancedDateTime").className = "myhide";
        }

        if (showAdvancedBuffer == false) {
            dojo.byId("tipAdvancedBuffer").style.display = "none";
            dojo.byId("advancedBuffer").style.display = "none";
        }
        else {
            dojo.byId("advancedBuffer").className = "myhide";
        }

        if (showCrimePoints == false) {
            dojo.byId("identify").style.display = "none";
            dojo.byId("crimelegend").style.display = "none";
        }

        if (showPictometryButton == false) {
            dojo.byId("pictometry").style.display = "none";
            dojo.byId("divPictometry").style.display = "none";
        }
        else {
            dojo.byId("divPictometry").className = "myhide";
        }

        if (showLayerList == false) {
            dojo.byId("layerlist").style.display = "none";
            dojo.byId("divLayerList").style.display = "none";
        }
        else {
            dojo.byId("divLayerList").className = "myhide";
        }

        if (showMeasureOption == false) {
            dojo.byId("measureOption").style.display = "none";
            dojo.byId("divMeasure").style.display = "none";
        }
        else {
            dojo.byId("divMeasure").className = "myhide";
        }

        if (showGraphicTab == false) {
            var tc = document.getElementById("searchPane");
            var pg = document.getElementById("tabGraphic");
            tc.removeChild(pg);
        }

        if (showCrimePoints == false) {
            dojo.byId("crimelegend").style.display = "none";
            dojo.byId("divCrimeCodes").style.display = "none";
        }
        else {
            dojo.byId("divCrimeCodes").className = "myhide";
        }

        //dojo.byId("bcRight_Center").style.visibility = "visible";
        //dojo.byId("divTableBar").style.visibility = "visible";

        if (cadMap == "") {
            var accordion = dojo.byId("leftPane");
            accordion.removeChild(document.getElementById("divCAD_Codes"));

            var cadResults = dojo.byId("bcRight_Bottom");
            if (cadResults) {
                dojo.byId("bcRight").removeChild(cadResults);
            }
        }
    }
    catch (err) {
        errorWin(err.description, "setTitleBar");
    }
}

function loadLocationWidget() {
    try {
        // load locations
        var splitLocationDisplayNames;
        var splitLocationLayerIndices;
        var splitLocationLayerFields;

        if (locationDisplayNames.indexOf("|") != -1) {
            splitLocationDisplayNames = locationDisplayNames.split("|");
        }
        else {
            splitLocationDisplayNames = new Array(locationDisplayNames);
        }

        if (locationLayerIndices.indexOf("|") != -1) {
            splitLocationLayerIndices = locationLayerIndices.split("|");
        }
        else {
            splitLocationLayerIndices = new Array(locationLayerIndices);
        }

        if (locationLayerQueryFields.indexOf("|") != -1) {
            splitLocationLayerFields = locationLayerQueryFields.split("|");
        }
        else {
            splitLocationLayerFields = new Array(locationLayerQueryFields);
        }

        var locationCombo = document.getElementById("selectLocationType");
        if (locationCombo == null) {
            alert("Missing combobox Location!");
            return;
        }

        while (locationCombo.options.length) {
            locationCombo.remove(0);
        }

        var newOpt;
        newOpt = document.createElement("option");
        newOpt.text = "None";
        newOpt.value = "None|None";
        locationCombo.options.add(newOpt);

        for (var i = 0; i < splitLocationDisplayNames.length; i++) {
            newOpt = document.createElement("option");
            newOpt.text = splitLocationDisplayNames[i];
            newOpt.value = splitLocationLayerIndices[i] + "|" + splitLocationLayerFields[i];
            locationCombo.options.add(newOpt);
        }
        locationCombo.options[0].selected = true;
    }
    catch (err) {
        errorWin(err.description, "loadLocationWidget");
    }
}

function loadBufferWidget() {
    try {
        // load buffer distances
        var splitBufferDisplayNames = bufferDistanceText.split("|");
        var splitBufferValues = bufferDistanceValue.split("|");

        var bufferCombo = document.getElementById("selectBuffer");

        if (bufferCombo == null) {
            alert("Missing combobox Buffer Distance!");
            return;
        }

        while (bufferCombo.options.length) {
            bufferCombo.remove(0);
        }

        var newOpt;

        for (var i = 0; i < splitBufferDisplayNames.length; i++) {
            newOpt = document.createElement("option");
            newOpt.text = splitBufferDisplayNames[i];
            newOpt.value = splitBufferValues[i];
            bufferCombo.options.add(newOpt);

            if (bufferDistanceDefault == splitBufferDisplayNames[i]) {
                bufferCombo.options[i].selected = true;
            }
        }
    }
    catch (err) {
        errorWin(err.description, "loadBufferWidget");
    }
}

function loadDateWidget() {
    try {
        // load buffer distances
        var splitDateDisplayNames = generalDateText.split("|");
        var splitDateValues = generalDateValue.split("|");

        var dateCombo = document.getElementById("selectDate");

        if (dateCombo == null) {
            alert("Missing combobox General Date!");
            return;
        }

        while (dateCombo.options.length) {
            dateCombo.remove(0);
        }

        var newOpt;

        for (var i = 0; i < splitDateDisplayNames.length; i++) {
            newOpt = document.createElement("option");
            newOpt.text = splitDateDisplayNames[i];
            newOpt.value = splitDateValues[i];
            dateCombo.options.add(newOpt);

            if (generalDateDefault == splitDateDisplayNames[i]) {
                dateCombo.options[i].selected = true;
            }
        }
    }
    catch (err) {
        errorWin(err.description, "loadDateWidget");
    }
}

function radioTime(idx) {
    try {
        var ft = document.getElementById("cboStartTime");
        var tt = document.getElementById("cboEndTime");

        switch (idx.id) {
            case "radioZeroTime":
                ft.disabled = true;
                tt.disabled = true;
                break;
            case "radioOneTime":
                ft.disabled = false;
                tt.disabled = false;
                break;
            case "radioTwoTime":
                ft.disabled = false;
                tt.disabled = true;
                break;
            case "radioThreeTime":
                ft.disabled = false;
                tt.disabled = true;
                break;
        }
    }
    catch (err) {
        errorWin(err.description, "radioTime");
    }
}

function radioDate(idx) {
    try {
        var ft = document.getElementById("calendarStart");
        var tt = document.getElementById("calendarEnd");

        switch (idx.id) {
            case "radioZeroDate":
                ft.disabled = true;
                tt.disabled = true;
                break;
            case "radioOneDate":
                ft.disabled = false;
                tt.disabled = false;
                break;
            case "radioTwoDate":
                ft.disabled = false;
                tt.disabled = true;
                break;
            case "radioThreeDate":
                ft.disabled = false;
                tt.disabled = true;
                break;
        }
    }
    catch (err) {
        errorWin(err.description, "radioDate");
    }
}

function showAdvancedDates() {
    try {
        dojo.byId("advancedDateTime").className = "myshow";
        dijit.byId("tabs").resize();
        bringToFront("advancedDateTime");
        var node = dojo.byId("tipAdvancedDates");
        node.blur();
    }
    catch (err) {
        errorWin(err.description, "showAdvancedDates");
    }
}

function hideAdvancedDates() {
    try {
        dojo.byId("advancedDateTime").className = "myhide";
        closeCalendar();
    }
    catch (err) {
        errorWin(err.description, "hideAdvancedDates");
    }
}

function showAdvancedBuffers() {
    try {
        dojo.byId("advancedBuffer").className = "myshow";
        bringToFront("advancedBuffer");
        var node = dojo.byId("tipAdvancedBuffer");
        node.blur();
    }
    catch (err) {
        errorWin(err.description, "showAdvancedBuffers)");
    }
}

function hideAdvancedBuffers() {
    try {
        dojo.byId("advancedBuffer").className = "myhide";
    }
    catch (err) {
        errorWin(err.description, "hideAdvancedBuffers");
    }
}

function getTimeRange() {

    // TIME
    try {
        var timeString = "";
        var jdx = "";
        var summary = "";

        if (document.getElementById("radioZeroTime").checked) { jdx = "0"; }
        if (document.getElementById("radioOneTime").checked) { jdx = "1"; }
        if (document.getElementById("radioTwoTime").checked) { jdx = "2"; }
        if (document.getElementById("radioThreeTime").checked) { jdx = "3"; }

        if (jdx == "") {
            jdx = "0";
            document.getElementById("radioZeroTime").checked = true;
        }

        switch (jdx) {
            case "0":
                timeString = "";
                break;
            case "1":
                {
                    switch (dbType) {
                        case "CAT_EXPORT":
                            {
                                if (parseInt(document.getElementById("cboEndTime").value) < parseInt(document.getElementById("cboStartTime").value)) {
                                    timeString = "((" + timeIMAP_RMS + " >= " + document.getElementById("cboStartTime").value + " AND " + timeIMAP_RMS + " <= 2400) OR (" + timeIMAP_RMS + " >= 0 AND " + timeIMAP_RMS + " <= " + document.getElementById("cboEndTime").value + "))";
                                }
                                else {
                                    timeString = "(" + timeIMAP_RMS + " >= " + document.getElementById("cboStartTime").value + " AND " + timeIMAP_RMS + " <= " + document.getElementById("cboEndTime").value + ")";
                                }
                                break;
                            }
                        case "MSSQL":
                            {
                                if (parseInt(document.getElementById("cboEndTime").value) < parseInt(document.getElementById("cboStartTime").value)) {
                                    timeString = "((DATEPART(hh," + timeIMAP_RMS + ") >= " + document.getElementById("cboStartTime").value.substr(0, 2) + " AND DATEPART(hh," + timeIMAP_RMS + ") <= 24) OR (DATEPART(hh," + timeIMAP_RMS + ") >= 0 AND DATEPART(hh," + timeIMAP_RMS + ") <= " + document.getElementById("cboEndTime").value.substr(0, 2) + "))";
                                }
                                else {
                                    timeString = "(DATEPART(hh," + timeIMAP_RMS + ") >= " + document.getElementById("cboStartTime").value.substr(0, 2) + " AND DATEPART(hh," + timeIMAP_RMS + ") <= " + document.getElementById("cboEndTime").value.substr(0, 2) + ")";
                                }
                                break;
                            }
                    }
                    summary = "Times between " + document.getElementById("cboStartTime").value + " and " + document.getElementById("cboEndTime").value;
                    break;
                }
            case "2":
                {
                    switch (dbType) {
                        case "CAT_EXPORT":
                            {
                                timeString = timeIMAP_RMS + " <= " + document.getElementById("cboStartTime").value;
                                break;
                            }
                        case "MSSQL":
                            {
                                timeString = "DATEPART(hh," + timeIMAP_RMS + ") <= " + document.getElementById("cboStartTime").value.substr(0, 2);
                                break;
                            }
                    }
                    summary = "Times before " + document.getElementById("cboStartTime").value;
                    break;
                }
            case "3":
                {
                    switch (dbType) {
                        case "CAT_EXPORT":
                            {
                                timeString = timeIMAP_RMS + " >= " + document.getElementById("cboStartTime").value;
                                break;
                            }
                        case "MSSQL":
                            {
                                timeString = "DATEPART(hh," + timeIMAP_RMS + ") >= " + document.getElementById("cboStartTime").value.substr(0, 2);
                                break;
                            }
                    }
                    summary = "Times after " + document.getElementById("cboStartTime").value;
                    break;
                }
        }
        return timeString + "|" + summary;
    }
    catch (err) {
        errorWin(err.description, "getTimeRange");
    }
}

function getDateRange() {

    // DATE
    try {
        var dateString = "";
        var jdx = "";
        var summary = "";
        var sdate;
        var edate;

        if (document.getElementById("radioZeroDate").checked) { jdx = "0"; }
        if (document.getElementById("radioOneDate").checked) { jdx = "1"; }
        if (document.getElementById("radioTwoDate").checked) { jdx = "2"; }
        if (document.getElementById("radioThreeDate").checked) { jdx = "3"; }

        if (jdx == "") {
            jdx = "0";
            document.getElementById("radioZeroDate").checked = true;
        }

        switch (jdx) {
            case "0":
                dateString = "";
                break;
            case "1":
                {
                    switch (dbType) {
                        case "CAT_EXPORT":
                            {
                                sdate = document.getElementById("calendarStart").value.split("-");
                                edate = document.getElementById("calendarEnd").value.split("-");
                                dateString = "(" + dateIMAP_RMS + " >= " + sdate[0] + sdate[1] + sdate[2] + " AND " + dateIMAP_RMS + " <= " + edate[0] + edate[1] + edate[2] + ")";
                                break;
                            }
                        case "MSSQL":
                            {
                                sdate = document.getElementById("calendarStart").value;
                                edate = document.getElementById("calendarEnd").value;
                                dateString = "(" + dateIMAP_RMS + " >= '" + sdate + "' AND " + dateIMAP_RMS + " <= '" + edate + "')";
                                break;
                            }
                    }
                    summary = "Dates between " + document.getElementById("calendarStart").value + " and " + document.getElementById("calendarEnd").value;
                    break;
                }
            case "2":
                {
                    switch (dbType) {
                        case "CAT_EXPORT":
                            {
                                sdate = document.getElementById("calendarStart").value.split("-");
                                dateString = dateIMAP_RMS + " <= " + sdate[0] + sdate[1] + sdate[2];
                                break;
                            }
                        case "MSSQL":
                            {
                                sdate = document.getElementById("calendarStart").value;
                                dateString = dateIMAP_RMS + " <= '" + sdate + "'";
                                break;
                            }
                    }
                    summary = "Dates before " + document.getElementById("calendarStart").value;
                    break;
                }
            case "3":
                {
                    switch (dbType) {
                        case "CAT_EXPORT":
                            {
                                sdate = document.getElementById("calendarStart").value.split("-");
                                dateString = dateIMAP_RMS + " >= " + sdate[0] + sdate[1] + sdate[2];
                                break;
                            }
                        case "MSSQL":
                            {
                                sdate = document.getElementById("calendarStart").value;
                                dateString = dateIMAP_RMS + " >= '" + sdate + "'";
                                break;
                            }
                    }
                    summary = "Dates after " + document.getElementById("calendarStart").value;
                    break;
                }
        }
        return dateString + "|" + summary;
    }
    catch (err) {
        errorWin(err.description, "getDateRange");
    }
}

function getDayOfWeek() {
    //DAY OF WEEK
    try {
        var dayofweek = "";
        var dayofweekNumber = "";
        var days = new Array();
        var daysNumber = new Array();
        var daystring = "";

        if (document.getElementById("Sunday").checked) { days.push("Sunday"); }
        if (document.getElementById("Monday").checked) { days.push("Monday"); }
        if (document.getElementById("Tuesday").checked) { days.push("Tuesday"); }
        if (document.getElementById("Wednesday").checked) { days.push("Wednesday"); }
        if (document.getElementById("Thursday").checked) { days.push("Thursday"); }
        if (document.getElementById("Friday").checked) { days.push("Friday"); }
        if (document.getElementById("Saturday").checked) { days.push("Saturday"); }

        if (document.getElementById("Sunday").checked) { daysNumber.push("1"); }
        if (document.getElementById("Monday").checked) { daysNumber.push("2"); }
        if (document.getElementById("Tuesday").checked) { daysNumber.push("3"); }
        if (document.getElementById("Wednesday").checked) { daysNumber.push("4"); }
        if (document.getElementById("Thursday").checked) { daysNumber.push("5"); }
        if (document.getElementById("Friday").checked) { daysNumber.push("6"); }
        if (document.getElementById("Saturday").checked) { daysNumber.push("7"); }

        if (days.length > 0) {

            for (var i = 0; i < days.length; i++) {

                if (dayofweek == "") {
                    dayofweek = "'" + days[i] + "'";
                }
                else {
                    dayofweek = dayofweek + ", '" + days[i] + "'";
                }
            }

            for (var i = 0; i < daysNumber.length; i++) {

                if (dayofweekNumber == "") {
                    dayofweekNumber = daysNumber[i];
                }
                else {
                    dayofweekNumber = dayofweekNumber + ", " + daysNumber[i];
                }
            }

            switch (dbType) {
                case "CAT_EXPORT":
                    daystring = dayIMAP_RMS + " IN (" + dayofweek + ")";
                    break;
                case "MSSQL":
                    daystring = "DATEPART(dw," + dayIMAP_RMS + ") IN (" + dayofweekNumber + ")";
                    break;
            }

        }

        return daystring + "|For days " + dayofweek;
    }
    catch (err) {
        errorWin(err.description, "getDayOfWeek");
    }
}

function makeIconActive(elm) {
    try {
        if (elm != null) {
            if (activeTool.length > 0) {
                var className = activeTool + "IconActive";
                var repClassName = activeTool + "Icon";
                var btnNode = dojo.byId('' + activeTool);
                dojo.removeClass(btnNode.firstChild, className);
                dojo.addClass(btnNode.firstChild, repClassName);
            }

            if (tb != null) {
                tb.deactivate();
            }
            if (tb_measure != null) {
                tb_measure.deactivate();
            }
            if (navToolbar != null) {
                navToolbar.deactivate();
            }

            var className = elm.id + "Icon";
            var repClassName = elm.id + "IconActive";
            var btnNode = dojo.byId('' + elm.id);
            dojo.removeClass(btnNode.firstChild, className);
            dojo.addClass(btnNode.firstChild, repClassName);
            activeTool = elm.id;

            map.graphics.disableMouseEvents();
            map.infoWindow.hide();

            switch (activeTool) {
                case "zoomin":
                    navToolbar.activate(esri.toolbars.Navigation.ZOOM_IN);
                    map.disablePan();
                    if (dojo.isIE) { map.setMapCursor("url(cursors/zoomin.cur)"); }
                    break;
                case "zoomout":
                    navToolbar.activate(esri.toolbars.Navigation.ZOOM_OUT);
                    map.disablePan();
                    if (dojo.isIE) { map.setMapCursor("url(cursors/zoomout.cur)"); }
                    break;
                case "pan":
                    navToolbar.activate(esri.toolbars.Navigation.PAN);
                    map.enablePan();
                    if (dojo.isIE) { map.setMapCursor("url(cursors/pan.cur)"); }
                    break;
                case "identify":
                    map.graphics.enableMouseEvents();
                    setIdentifyProcedure();
                    map.disablePan();
                    if (dojo.isIE) { map.setMapCursor("url(cursors/identify.cur)"); }
                    break;
                case "pictometry":
                    showPictometry();
                    map.disablePan();
                    if (dojo.isIE) { map.setMapCursor("url(cursors/pictometry.cur)"); }
                    break;
                case "measureLine":
                    tb_measure.activate(esri.toolbars.Draw.LINE);
                    map.disablePan();
                    if (dojo.isIE) { map.setMapCursor("url(cursors/measure.cur)"); }
                    break;
                case "measurePoly":
                    tb_measure.activate(esri.toolbars.Draw.POLYGON);
                    map.disablePan();
                    if (dojo.isIE) { map.setMapCursor("url(cursors/measure.cur)"); }
                    break;
                case "point":
                    tb.activate(esri.toolbars.Draw.POINT);
                    map.disablePan();
                    if (dojo.isIE) { map.setMapCursor("url(cursors/drawpoint.cur)"); }
                    break;
                case "line":
                    tb.activate(esri.toolbars.Draw.FREEHAND_POLYLINE);
                    map.disablePan();
                    if (dojo.isIE) { map.setMapCursor("url(cursors/drawline.cur)"); }
                    break;
                case "poly":
                    tb.activate(esri.toolbars.Draw.FREEHAND_POLYGON);
                    map.disablePan();
                    if (dojo.isIE) { map.setMapCursor("url(cursors/drawpoly.cur)"); }
                    break;
            }

            var node = dojo.byId(elm.id);
            node.blur();
        }
    }
    catch (err) {
        errorWin(err.description, "makeIconActive");
    }
}

function roundNumber(number, decimal_points) {
    try {
        if (!decimal_points) return Math.round(number);
        if (number == 0) {
            var decimals = "";
            for (var i = 0; i < decimal_points; i++) decimals += "0";
            return "0." + decimals;
        }

        var exponent = Math.pow(10, decimal_points);
        var num = Math.round((number * exponent)).toString();
        return num.slice(0, -1 * decimal_points) + "." + num.slice(-1 * decimal_points)
    }
    catch (err) {
        errorWin(err.description, "roundNumber");
    }
}

function daysInMonth(month, year) {
    try {
        var m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
        if (month != 2) return m[month - 1];
        if (year % 4 != 0) return m[1];
        if (year % 100 == 0 && year % 400 != 0) return m[1];
        return m[1] + 1;
    }
    catch (err) {
        errorWin(err.description, "daysInMonth");
    }
}

function toggleDivBufferVisible() {
    try {
        var chkbox = document.getElementById("useAdvancedBuffer");
        if (chkbox.checked) {
            document.getElementById("divGeneralBuffer").style.display = "none";
            document.getElementById("divAdvancedBufferOptions").style.display = "block";
        }
        else {
            document.getElementById("divGeneralBuffer").style.display = "block";
            document.getElementById("divAdvancedBufferOptions").style.display = "none";
        }
    }
    catch (err) {
        errorWin(err.description, "toggleDivBufferVisible");
    }
}

function toggleDivDateVisible() {
    try {
        var chkbox = document.getElementById("useAdvancedDateTime");
        if (chkbox.checked) {
            // check for improper settings

            var ft = document.getElementById("cboStartTime");
            var tt = document.getElementById("cboEndTime");

            var ftw = ft.selectedIndex;
            var ftv = ft.options[ftw].text;

            var ttw = tt.selectedIndex;
            var ttv = tt.options[ttw].text;

            var rd0t = document.getElementById("radioZeroTime").checked;
            var rd1t = document.getElementById("radioOneTime").checked;
            var rd2t = document.getElementById("radioTwoTime").checked;
            var rd3t = document.getElementById("radioThreeTime").checked;

            if (rd1t) {
                if (ftv == "") { alert("Start time must be set!"); chkbox.checked = false; return; }
                if (ttv == "") { alert("End time must be set!"); chkbox.checked = false; return; }

                if (parseInt(ftv) == parseInt(ttv)) { alert("Start and end times can not be the same!"); chkbox.checked = false; return; }

                if (parseInt(ftv) > parseInt(ttv)) {
                    if (confirm("Start time is greater than end time. \nTime will cross over midnight.")) {
                        //nothing
                    }
                    else {
                        chkbox.checked = false;
                        return;
                    }
                }
            }

            if (rd2t) {
                if (ftv == "0000") { alert("Time can not be 0000!"); chkbox.checked = false; return; }
            }

            if (rd3t) {
                if (ftv == "2400") { alert("Time can not be 2400!"); chkbox.checked = false; return; }
            }

            document.getElementById("divGeneralDate").style.display = "none";
            document.getElementById("divAdvancedDateOptions").style.display = "block";
        }
        else {
            document.getElementById("divGeneralDate").style.display = "block";
            document.getElementById("divAdvancedDateOptions").style.display = "none";
        }
    }
    catch (err) {
        errorWin(err.description, "toggleDivDateVisible");
    }
}

//************************************
// MEASURING
//************************************

function addMeasure(geometry) {
    try {

        geometry.setSpatialReference(new esri.SpatialReference({ wkid: parseInt(refScale_baseMap) }));

        var type = geometry.type;
        if (type === "point" || type === "multipoint") {
            summaryLocation = "GRAPHIC POINT";
            var symbol = new esri.symbol.SimpleMarkerSymbol();
            symbol.setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE);
            symbol.setColor(new dojo.Color([255, 0, 0, 0.75]));
            symbol.setSize(8);
        }
        else if (type === "line" || type === "polyline") {
            summaryLocation = "GRAPHIC LINE";
            var symbol = new esri.symbol.CartographicLineSymbol(esri.symbol.CartographicLineSymbol.STYLE_SOLID,
                            new dojo.Color([255, 0, 0]), 2, esri.symbol.CartographicLineSymbol.CAP_ROUND,
                            esri.symbol.CartographicLineSymbol.JOIN_ROUND);
        }
        else {
            summaryLocation = "GRAPHIC POLYGON";
            var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID,
                            new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 0, 0]), 2),
                            new dojo.Color([255, 0, 0, 0.5]));
        }

        var infoTemplate = new esri.InfoTemplate();
        infoTemplate.title = "Measure";

        var graphic = new esri.Graphic(geometry, symbol);
        graphic.setInfoTemplate(infoTemplate);
        map.graphics.add(graphic);

        if (type === "line" || type === "polyline") {
            geometryService.project([graphic], new esri.SpatialReference({ "wkid": parseInt(refScale_addressLocator) }),
            function(graphics) {
                geometryService.lengths(graphics);
            });
        }
        else {
            geometryService.project([graphic], new esri.SpatialReference({ "wkid": parseInt(refScale_addressLocator) }),
            function(graphics) {
                geometryService.areasAndLengths(graphics);
            });
        }
    }
    catch (err) {
        errorWin(err.description, "addMesure");
    }
}

function outputDistance(result) {
    var len = result.lengths[0];
    dojo.byId("measureResults").innerHTML = "Length: " + roundNumber(len, 2) + " feet, " + roundNumber(len / 5280, 2) + " miles";
}

function outputAreaAndLength(result) {
    var ara = result.areas[0];
    dojo.byId("measureResults").innerHTML = "Area: " + roundNumber(ara, 2) + " sq feet, " + roundNumber(ara / 43560, 2) + " acres";
}

function showMeasure() {
    try {
        dojo.byId("divMeasure").className = "myshow";
        bringToFront("divMeasure");
        var node = dojo.byId("measureOption");
        node.blur();
    }
    catch (err) {
        errorWin(err.description, "showMeasure)");
    }
}

function hideMeasure() {
    try {
        dojo.byId("divMeasure").className = "myhide";
        makeIconActive(document.getElementById("pan"));
    }
    catch (err) {
        errorWin(err.description, "hideMeasure");
    }
}

function clearMeasureGraphics() {
    try {
        var graphics = map.graphics.graphics;
        var graphic;
        for (var i = graphics.length - 1, il = 0; i >= il; i--) {
            graphic = graphics[i];
            var title = graphic.getTitle();
            if (title == "Measure") {
                map.graphics.remove(graphic);
            }
        }
    }
    catch (err) {
        errorWin(err.description, "clearMeasureGraphics");
    }
}

//**************************************************************
// ZINDEX BRING TO FRONT OR SEND TO BACK
//**************************************************************

function getAbsoluteDivs() {
    var arr = new Array();
    var all_divs = document.body.getElementsByTagName("DIV");
    var j = 0;

    for (i = 0; i < all_divs.length; i++)
        if (all_divs.item(i).style.position == 'absolute') {
        arr[j] = all_divs.item(i);
        j++;
    }

    return arr;
}

function bringToFront(id) {
    if (!document.getElementById ||
        !document.getElementsByTagName)
        return;

    var obj = document.getElementById(id);
    var divs = getAbsoluteDivs();
    var max_index = 0;
    var cur_index;

    // Compute the maximal z-index of   
    // other absolute-positioned divs   
    for (i = 0; i < divs.length; i++) {
        var item = divs[i];
        if (item == obj ||
            item.style.zIndex == '')
            continue;

        cur_index = parseInt(item.style.zIndex);
        if (max_index < cur_index) {
            max_index = cur_index;
        }
    }

    obj.style.zIndex = max_index + 1;
}

function sendToBack(id) {
    if (!document.getElementById ||
        !document.getElementsByTagName)
        return;

    var obj = document.getElementById(id);
    var divs = getAbsoluteDivs();
    var min_index = 999999;
    var cur_index;

    if (divs.length < 2)
        return;

    // Compute the minimal z-index of   
    // other absolute-positioned divs   
    for (i = 0; i < divs.length; i++) {
        var item = divs[i];
        if (item == obj)
            continue;

        if (item.style.zIndex == '') {
            min_index = 0;
            break;
        }

        cur_index = parseInt(item.style.zIndex);
        if (min_index > cur_index) {
            min_index = cur_index;
        }

    }

    if (min_index > parseInt(obj.style.zIndex)) {
        return;
    }

    obj.style.zIndex = 1;

    if (min_index > 1)
        return;

    var add = min_index == 0 ? 2 : 1;

    for (i = 0; i < divs.length; i++) {
        var item = divs[i];
        if (item == obj)
            continue;

        item.style.zIndex += add;
    }
}   


