﻿function doInitCompSales(pin) {

    // Find the Target Graphic
    var selectedGraphic = findTargetGraphic(pin);
    
    // show the advanced search panel
    if (selectedGraphic != null) {

        // clear the graphics
        clearAllGraphics();

        // highlight the selected point
        selectedGraphic.setSymbol(parcelHighlightSymbol);
        map.graphics.add(selectedGraphic);
        
    
        var pt = selectedGraphic.geometry.getExtent().getCenter();
        advancedSearch.setCompSalePoint(pt.x, pt.y);
        showPanel("advanced-search");

    } else {
        // find the parcel with a search...
        //alert("can't find");
    }



}

function findTargetGraphic(pin) {

    try {
        var selectedGraphic = null;
        if (detailGraphic != null) {
            if (detailGraphic.attributes["CYPAR"] == pin) {
                selectedGraphic = detailGraphic;
                return selectedGraphic;
            }
        }
        if (selectedGraphic === null) {
            dojo.forEach(parcelGraphics.graphics, function(g) {
                if (g.attributes != null) {
                    if (g.attributes["CYPAR"] == pin)
                        selectedGraphic = g;
                }
            });
        }

        if (selectedGraphic === null) {
            dojo.forEach(map.graphics.graphics, function(g) {
                if (g.attributes != null) {
                    if (g.attributes["CYPAR"] == pin)
                        selectedGraphic = g;
                }
            });
        }
        
        return selectedGraphic;
    } catch (Error) {
    console.debug("An error occurred in function 'findTargetGraphic'");
    console.debug(Error);
    }
}

function AdvancedSearchClass() {

    // Elements in AdvancedSearch:
    var minAcreageElementName = "advancedsearch_minacreage";
    var maxAcreageElementName = "advancedsearch_maxacreage";
    var maxyearbuiltElementName = "advancedsearch_maxyearbuilt";
    var minyearbuiltElementName = "advancedsearch_minyearbuilt";
    var minSaleElementName = "advancedsearch_minsaleprice";
    var maxSaleElementName = "advancedsearch_maxsaleprice";
    var minValueElementName = "advancedsearch_minvalue";
    var maxValueElementName = "advancedsearch_maxvalue";
    var minsqfootageElementName = "advancedsearch_minsqfeet";
    var maxsqfootageElementName = "advancedsearch_maxsqfeet";
    var saleDateElementName = "advancedsearch_saledate";

    this.doSearch = function() {

        returnToPanel = "advanced-search";

        additionalFields = ["SALE_DATE", "SALE_PRICE"];

        parcelQuery.clearQuery();

        // Set up query tasks
        var advQueryTask = new esri.tasks.QueryTask(parcelSearchLayerURL);
        // Set up query for the hazardous parcel
        var advQuery = new esri.tasks.Query();
        var swhere = this.getWhereClause();
        advQuery.where = swhere;

        // set the where clause so we know what we did
        txtWhereClause = swhere;

        // go back
        dojo.byId("back").innerHTML = "<a href=\"#\" onmousedown=\"showPanel('advanced-search');\">Refine Search Parameters</a>";

        advQuery.outFields = parcels_return_fields;
        advQuery.returnGeometry = true;

        switch (dojo.byId("advancedsearch_searchdistance").value) {
            case "9999":
                advQuery.geometry = map.extent;
                advQuery.spatialRelationship = esri.tasks.Query.SPATIAL_REL_INTERSECTS;
                //Execute task and call showResults on completion
                showSearching();
                advQueryTask.execute(advQuery, showParcelSearchResults, showSearchError);

                break;
            case "":
                showSearching();
                advQueryTask.execute(advQuery, showParcelSearchResults, showSearchError);
                break;
            default:

                var x = dojo.byId("advancedsearch_x").value;
                var y = dojo.byId("advancedsearch_y").value;

                var d = dojo.byId("advancedsearch_searchdistance").value;
                var miles = d * 5280;
                var pt = new esri.geometry.Point(x, y, map.spatialReference);
                var ptGraphic = new esri.Graphic(pt);
                var params = new esri.tasks.BufferParameters();
                params.distances = [miles];
                params.bufferSpatialReference = new esri.SpatialReference({ wkid: 2264 });
                params.outSpatialReference = map.spatialReference;
                params.unit = eval("esri.tasks.BufferParameters.UNIT_FOOT");
                params.features = [ptGraphic];
                gsvc = new esri.tasks.GeometryService("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");

                gsvc.buffer(params, function(features) {
                    console.debug(advQuery);
                    advQuery.geometry = features[0].geometry;
                    advQueryTask.execute(advQuery, showParcelSearchResults, showSearchError);
                    showSearching();
                    zoomMap(features[0].geometry.getExtent().expand(1.3));
                    bufferGraphics = features;
                }, showSearchError);

                break;


        }





    }

    this.Clear = function() {

        dojo.byId(minAcreageElementName).value = "";
        dojo.byId(maxAcreageElementName).value = "";
        dojo.byId(minValueElementName).value = "";
        dojo.byId(maxValueElementName).value = "";
        dojo.byId(minyearbuiltElementName).value = "";
        dojo.byId(maxyearbuiltElementName).value = "";
        dojo.byId(minSaleElementName).value = "";
        dojo.byId(maxSaleElementName).value = "";
        dojo.byId(minsqfootageElementName).value = "";
        dojo.byId(maxsqfootageElementName).value = "";

        dojo.byId(saleDateElementName).value = "";

        var controlPrefix = "checkbox_luclass_";
        var controls = new Array();
        controls[0] = "vacantland";
        controls[1] = "residential";
        controls[2] = "mobile";
        controls[3] = "commercial";
        controls[4] = "industrial";
        controls[5] = "improvedland";

        var luVals = [];
        for (var i = 0; i < controls.length; i++) {
            var c = document.getElementById(controlPrefix + controls[i]);
            c.checked = "";
        }

        dojo.byId("advancedsearch_x").value = "";
        dojo.byId("advancedsearch_y").value = "";

        // reset the select
        var select = dojo.byId("advancedsearch_searchdistance")
        select.innerHTML = "";
        var opt = document.createElement("option");
        opt.setAttribute("value", "");
        opt.innerHTML = "No Preference";
        select.appendChild(opt);

        opt = document.createElement("option");
        opt.setAttribute("value", "9999");
        opt.innerHTML = "Current Extent";
        select.appendChild(opt);

    }

    this.setCompSalePoint = function(x, y) {
        dojo.byId("advancedsearch_x").value = x;
        dojo.byId("advancedsearch_y").value = y;

        // reset the select
        var select = dojo.byId("advancedsearch_searchdistance")
        select.innerHTML = "";

        dojo.forEach([1, 2, 3, 5, 10, 20, 30, 50], function(miles) {
            var opt = document.createElement("option");
            opt.setAttribute("value", miles);

            if (miles === 50)
                opt.innerHTML = "Entire County";
            else
                opt.innerHTML = miles + " Mile Buffer";
            select.appendChild(opt);
        });

    }

    this.getWhereClause = function() {

        var sWhere = "";
        var minAcreage = dojo.byId(minAcreageElementName).value;
        var maxAcreage = dojo.byId(maxAcreageElementName).value;
        var minValue = dojo.byId(minValueElementName).value;
        var maxValue = dojo.byId(maxValueElementName).value;
        var minyrbuilt = dojo.byId(minyearbuiltElementName).value;
        var maxyrbuilt = dojo.byId(maxyearbuiltElementName).value;
        var minSalePrice = dojo.byId(minSaleElementName).value
        var maxSalePrice = dojo.byId(maxSaleElementName).value
        var minsqfootage = dojo.byId(minsqfootageElementName).value;
        var maxsqlfootage = dojo.byId(maxsqfootageElementName).value

        var saledatestring = dojo.byId(saleDateElementName).value;



        parcelQuery.minsaleprice = minSalePrice;
        parcelQuery.maxsaleprice = maxSalePrice;

        parcelQuery.minacreage = minAcreage;
        parcelQuery.maxacreage = maxAcreage;
        parcelQuery.minvalue = minValue;
        parcelQuery.maxvalue = maxValue;

        parcelQuery.minsqfootage = minsqfootage;
        parcelQuery.maxsqfootage = maxsqlfootage;

        if (minyrbuilt != "")
            parcelQuery.minyearbuilt = minyrbuilt;

        if (maxyrbuilt != "")
            parcelQuery.maxyearbuilt = maxyrbuilt;

        // get the date query - all sales in past 3-6-12-36 months
        var d = new Date();

        if (saledatestring != "") {
           // alert(saledatestring);
            var startdate = dojo.date.add(d, "month", parseInt("-" + saledatestring));
            var sStartDate = (startdate.getMonth() + 1) + "/" + startdate.getDate() + "/" + startdate.getFullYear();
            parcelQuery.startDate = sStartDate;
        }

        // Land use Values
        var controlPrefix = "checkbox_luclass_";
        var controls = new Array();
        controls[0] = "vacantland";
        controls[1] = "residential";
        controls[2] = "mobile";
        controls[3] = "commercial";
        controls[4] = "industrial";
        controls[5] = "improvedland";

        var luVals = [];
        for (var i = 0; i < controls.length; i++) {
            var c = document.getElementById(controlPrefix + controls[i]);
            if (c != null)
                if (c.checked)
                luVals.push("'" + (i + 1) + "'");
        }
        parcelQuery.landuse = luVals.join(",");

        sWhere = parcelQuery.getAdvancedWhereClause()
        console.debug(sWhere);

        return sWhere;

    }
}



function getTownships() {

    dojo.xhrGet({
        url: "./YanceyWebService.asmx/Townships",
        handleAs: "json",
        contentType: "application/json; charset=utf-8",
        load: function(data, args) {
             var mySelect = dojo.byId("cboTownships");
                var myBlank = document.createElement("option");
                myBlank.setAttribute("value", "");
                mySelect.appendChild(myBlank);
                for (var i = 0; i < data.d.length; i++) {
                    var name = data.d[i].Text;
                    var val = data.d[i].Value;
                    var opt = document.createElement("option");
                    opt.setAttribute("value", val);
                    opt.innerHTML = name;
                    mySelect.appendChild(opt);
                }
        },
        error: function(error, args) { console.warn("error!", error); }
    });
};

function showSpecificDate() {

    var cbo = dojo.byId("cbodate");
    if (cbo.value == "99")
        dojo.style('specific_date', { 'display': 'block' });
    else
        dojo.style('specific_date', { 'display': 'none' });        


}
