﻿// ############################################################
// AbutterSearch
// ############################################################
function AbutterSearch(searchType, distance, selectedStreet, selectedKey, selectedRule, doZoomTo, doLabelPID, doLabelAddress) {
    //if(!IsOneParcelSelected())
    if (!selectedKey.length > 0) {
        GetTaskFrame().HideLoadingImage();
        alert("Please select a single parcel and try again.");
        return;
    }

    // Create a new XMLHttpRequest object...
    var xmlHttp = GetXMLHttpRequest();
    var sessionId = _SESSION_ID;
    var mapDefinition = _MAP_DEFINITION;

    var labelPID = "false";
    var labelAddress = "false";

    if (doLabelPID) { labelPID = "true"; }
    if (doLabelAddress) { labelAddress = "true"; }
    
    // Define the response handler...
    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4) {
            // Parse the response...
            try {
                var abutterListXML = xmlHttp.responseText;
                if (abutterListXML.length > 0) {
                    var xmlDoc = xmlHttp.responseXML.documentElement;
                    var selectionXML = xmlDoc.getElementsByTagName('SelectionXML')[0].firstChild.data;
                    var parcels = xmlDoc.getElementsByTagName("ParcelProperty");
                    var keys = "";
                    if (parcels != null) {
                        for (var i = 0; i < parcels.length; i++) {
                            if (keys.length > 0) { keys = keys + ","; }
                            keys = keys + parcels[i].getAttribute("FeatureKey");
                        }
                    }

                    // Set a flag that indicates results are being displayed...
                    GetTaskFrame()._isResultsLoaded = true;

                    // Refresh the map...
                    GetMapFrame().Refresh();

                    // Zoom to the specified features...
                    if (doZoomTo) {
                        ZoomToFeaturesSynchronously(_PARCEL_FEATURE_NAME, keys);
                    }

                    // Refresh the map...
                    //GetMapFrame().Refresh();

                    // Deselect the source parcel...
                    GetMapFrame().SetSelection("", false);

                    // Send tabluar list to new window for viewing/printing...
                    GetTaskFrame().AbutterSearch_DisplayAbutterSearchResults(xmlDoc, selectedStreet, selectedKey, selectedRule);
                }
                else {
                    alert("No abutters were found within the specified distance.");
                }
            }
            catch (e) { }
        }
    }

    // Make the request...
    xmlHttp.open("GET", "../MapGuide/AjaxApi.aspx?sessionId=" + sessionId + "&mapDefinition=" + mapDefinition + "&distance=" + distance + "&searchType=" + searchType + "&selectedKey=" + selectedKey + "&labelPID=" + labelPID + "&labelAddress=" + labelAddress + "&command=EXECUTE_SEARCH", true);
    xmlHttp.send(null);
}

// ############################################################
// IsAbutterSearchLoaded
// ############################################################
function IsAbutterSearchLoaded() {
    var isloaded = false;
    try {
        var url = GetTaskFrame().location.href;
        if (url.indexOf("AbutterSearch.aspx") != -1) {
            isloaded = true;
        }

    }
    catch (e) { }

    return isloaded;
}

// ############################################################
// IsOneParcelSelected
// ############################################################
function IsOneParcelSelected() {
    var cnt = 0;

    // Send the request...
    var xmlHttp = GetXMLHttpRequest();
    var sessionId = _SESSION_ID;
    var mapDefinition = _MAP_DEFINITION;
    xmlHttp.open("GET", "../MapGuide/AjaxApi.aspx?sessionId=" + sessionId + "&mapDefinition=" + mapDefinition + "&command=COUNT_SELECTED", false);
    xmlHttp.send(null);

    // Parse the response...
    try {
        if (xmlHttp.responseText.length > 0) {
            cnt = parseInt(xmlHttp.responseText);
        }
    }
    catch (e) { }

    if (cnt == 1) { return true; }
    else { return false; }
}

// ############################################################
// IsQueryBuilderLoaded
// ############################################################
function IsQueryBuilderLoaded() {
    var isloaded = false;
    try {
        var url = GetTaskFrame().location.href;
        if (url.indexOf("QueryBuilder.aspx") != -1) {
            isloaded = true;
        }

    }
    catch (e) { }

    return isloaded;
}

// ############################################################
// SelectParcel
// ############################################################
function SelectParcel(featureKey) {
    var featureName = _PARCEL_FEATURE_NAME;
    top.ZoomToAndSelectSingleFeature(featureName, featureKey);   
    //SelectAndZoomToSingleFeature(featureName, featureKey);
}

// ############################################################
// UpdateAbutterSearchTaskPanel
// ############################################################
function UpdateAbutterSearchTaskPanel(xmlSelection, selCount) {
    // Check that the abutter search page is loaded...
    var isLoaded = IsAbutterSearchLoaded();

    // Check that the display scale is below the parcel scale threshold...
    var isParcelsDisplayed = false;
    if (GetMapScale() <= _PARCEL_LAYER_DISPLAY_SCALE_THRESHHOLD) {
        isParcelsDisplayed = true;
    }

    // Update the abutter search panel if criteria are met...
    if (isLoaded && isParcelsDisplayed) {
        if (selCount == 1) {
            // Retrieve the feature key and layer id from the selected feature's XML...
            var props = xmlSelection.getElementsByTagName("Property");
            var featureKey = "";
            var featureName = "";
            var layerId = "";

            if (props != null) {
                if (props.length > 0) {
                    for (var i = 0; i < props.length; i++) {
                        var name = props[i].getAttribute("name");
                        if (name == "datalink") {
                            featureKey = props[i].getAttribute("value");
                            var layers = xmlSelection.getElementsByTagName("Layer");
                            layerId = layers[0].getAttribute("id");
                            break;
                        }
                    }
                }
            }

            // Only continue if the selected feature is on the correct layer...
            var layer = GetMapFrame().GetLegendCtrl().GetLayer(layerId);
            if ((_ABUTTER_SEARCH_LAYER_NAME.indexOf(layer.name) != -1) && (featureKey.length > 0)) {
                try { GetTaskFrame().AbutterSearch_SetSelectedAddress(featureKey); } catch (e) { }
            }
            else {
                try { GetTaskFrame().AbutterSearch_SetSelectedAddress(null); } catch (e) { }
            }
        }
        else {
            try { GetTaskFrame().AbutterSearch_SetSelectedAddress(null); } catch (e) { }
        }
    }
}
