var _currentOwnerRecord = 0;
var _currentPageSize = 0;

//Search by owner Name
function searchByOwnerName() {
    showLoading();

    //Clear results
    dojo.place("<div></div>", "uxGrid0", "only");
   
   //get the owner name entered by the user
   var searchBox = document.getElementById("ownerSearch");
   var searchText = searchBox.value;
   
   //create the QueryTask and Query Parameters objects
   var ownerQueryTask = new esri.tasks.QueryTask(_parcelFeatureLayer + "/49");

   var ownerQuery = new esri.tasks.Query();
   ownerQuery.returnGeometry = true;
   ownerQuery.outFields = ["*"];
   ownerQuery.where = "owner LIKE '%" + searchText + "%'";
   //execute the query
   ownerQueryTask.execute(ownerQuery, function (fset) {
       if (fset.features.length > 0) {
           
           //Look up 911 Info From Address Table
           handleOwnerNameCallback(fset);
       }
       else {
           
           alert("No Tax Parcels found Try again");
       }
   });
}

function searchByAddress() {
    showLoading();

    //Clear Address results
    dojo.place("<div></div>", "uxGridARL", "only");

    //get the address entered by the user
    var searchText = dojo.trim(dojo.byId("searchBox").value);

    if (searchText == "") {
        alert("Please enter an address");
        return;
    }

    //create the QueryTask and Query Parameters objects
    var addyQueryTask = new esri.tasks.QueryTask(_parcelFeatureLayer + "/49");

    var addyQuery = new esri.tasks.Query();
    addyQuery.returnGeometry = true;
    addyQuery.outFields = ["*"];
    if(searchText.indexOf(' ') == -1){
        addyQuery.where = "propaddr LIKE '%" + searchText + "%'";
    }
    else {
        var spacePos = searchText.indexOf(' ');
        var query1 = searchText.substring(0, spacePos);
        var query2 = searchText.substring(spacePos + 1, searchText.length);
        addyQuery.where = "propaddr LIKE '%" + query1 + "%' AND propaddr LIKE '%" + query2 + "%'";
    }

    //execute the query
    addyQueryTask.execute(addyQuery, function (fset) {
        if (fset.features.length > 0) {
            
            //Look up 911 Info From Address Table
            handleAddressSearchCallback(fset);
        }
        else {
            
            alert("No Tax Parcels found Try again");
        }
    });
}

//Search by parcel id
function searchByParcelID() {
    //get the owner name entered by the user
    var searchText = dojo.byId("parcelID").value;
    if (dojo.trim(searchText) == "") {
        alert("Please enter a Parcel Number.");
        return;
    }

    showLoading();

    //create the QueryTask and Query Parameters objects
    var ownerQueryTask = new esri.tasks.QueryTask(_parcelFeatureLayer + "/49");

    var ownerQuery = new esri.tasks.Query();
    ownerQuery.returnGeometry = true;
    ownerQuery.outFields = ["*"];
    ownerQuery.where = "parcelid  = '" + searchText + "'";

    //execute the query
    ownerQueryTask.execute(ownerQuery, function (fset) {
        if (fset.features.length > 0) {
           
            //Look up 911 Info From Address Table
            handleOwnerNameCallback(fset);
        }
        else {
           
            alert("No Tax Parcels found Try again");
        }
    });
}

//Search by MGP
function searchByMGP() {

    var sb1 = dojo.byId("mapMGP").value;
    var sb2 = dojo.byId("groupMGP").value;
    var sb3 = dojo.byId("parcelMGP").value;

    //if (dojo.trim(sb1) == "" || dojo.trim(sb2) == "" || dojo.trim(sb3) == "") {
    if (dojo.trim(sb1) == "" || dojo.trim(sb3) == "") {
        alert("Please enter a map and parcel number.");
        return;
    }
	
	
	
    showLoading();

    //create the QueryTask and Query Parameters objects
    var ownerQueryTask = new esri.tasks.QueryTask(_parcelFeatureLayer + "/49");

    var ownerQuery = new esri.tasks.Query();
    ownerQuery.returnGeometry = true;
    ownerQuery.outFields = ["*"];
    ownerQuery.where = "map ='" + sb1 + "' AND gp ='" + sb2 + "' AND parcel ='" + sb3 + "'";
	//ownerQuery.where = "map ='" + sb1 + "' AND parcel ='" + sb3 + "'";
	
    //execute the query
    ownerQueryTask.execute(ownerQuery, function (fset) {
        if (fset.features.length > 0) {
            
            //Look up 911 Info From Address Table
            handleOwnerNameCallback(fset);
        }
        else {
            
            alert("No Tax Parcels found Try again");
        }
    });
}



function handleOwnerNameCallback(fset) {
    //Clear results pane
    dojo.place("<div></div>", "uxGrid0", "only");
    if (fset.features.length == 1) {
       
        GetRelationParcelDetails(fset.features[0]);
    }
    else {

        //Sort it by address
        fset.features = fset.features.sort(function (a, b) {
            return a.attributes.owner > b.attributes.owner ? 1 : -1;
        });

        featureSet = fset;
        var numFeatures = fset.features.length;

        //content for the table
        var content = "<div style='margin: 10px 0;margin-left: 3px;'>" + numFeatures + " results</div><table id='uxOwnerResultTable'>";
        for (var i = 0; i < numFeatures && i < _ownerSearchResultsPageSize; i++) {
            var graphic = fset.features[i];
            content += "<tr><td width='125px'><a href='javascript:GetRelationParcelDetails(featureSet.features[" + i + "]);'>" + getFieldValue(graphic, keyField) + "</a></td>";
            content += "<td width='*'>" + getFieldValue(graphic, addressField) + "</td></tr>";
        }
        _currentOwnerRecord = i;
        _currentPageSize = i;
        content += "</table>";

        searchResults = null;

        dojo.place(content, "uxGrid0");

        if (numFeatures > _ownerSearchResultsPageSize) {
            dojo.place('<div id="uxGetMoreOwnerResults" onclick="GetMoreOwnerSearchResults()" style="cursor: pointer;float: right;margin-top: 15px;margin-bottom: 15px;text-decoration: underline;font-size: 12px;">Next ' + _ownerSearchResultsPageSize + ' results</div>', "uxGrid0");
            dojo.place('<div id="uxGetPreviousOwnerResults" onclick="ShowPreviousOwnerSearchResults()" style="cursor: pointer;float: left;margin-bottom: 15px;margin-top: 15px;text-decoration: underline;font-size: 12px;display:none;">Last ' + _ownerSearchResultsPageSize + ' results</div>', "uxGrid0");        
        }
        hideLoading();
    }
}

function handleAddressSearchCallback(fset) {
    //Clear results pane
    var resultsText = "results"; 
    dojo.place("<div></div>", "uxGridARL", "only");
    if (fset.features.length == 1) {
        
        featureSet = fset;
        //GetRelationParcelDetails(fset.features[0]);
        resultsText = "result";
    }
    else {

        //Sort it by address
        fset.features = fset.features.sort(function (a, b) {
            return a.attributes.propaddr > b.attributes.propaddr ? 1 : -1;
        });

        featureSet = fset;
        resultsText = "results";

    }

    hideLoading();

    var numFeatures = fset.features.length > 15 ? 15 : fset.features.length;
    var content = "<div style='margin: 10px 0;margin-left: 3px;'>" + numFeatures + " " + resultsText + "</div><table id='uxAddressResultTable'>";
    for (var i = 0; i < numFeatures && i < 15; i++) {
        var graphic = fset.features[i];
        content += "<tr><td width='125px'><a href='javascript:GetRelationParcelDetails(featureSet.features[" + i + "]);'>" + graphic.attributes.propaddr + "</a></td></tr>";
    }

    content += "</table>";
    searchResults = null;
    dojo.place(content, "uxGridARL");

}

function GetMoreOwnerSearchResults() {
    var content = "<table id='uxOwnerResultTable'>";
    var numFeatures = featureSet.features.length;
    _currentPageSize = 0;

    for (var i = _currentOwnerRecord; i < numFeatures && i < _ownerSearchResultsPageSize + _currentOwnerRecord; i++) {
        var graphic = featureSet.features[i];
        content += "<tr><td width='125px'><a href='javascript:GetRelationParcelDetails(featureSet.features[" + i + "]);'>" + getFieldValue(graphic, keyField) + "</a></td>";
        content += "<td width='*'>" + getFieldValue(graphic, addressField) + "</td></tr>";
        _currentPageSize++;
    }
    content += "</table>";
    dojo.place(content, "uxOwnerResultTable", "replace");
    _currentOwnerRecord = i;
    
    //Hide link if we've reached the limit
    if (_currentOwnerRecord >= numFeatures) {
        dojo.byId("uxGetMoreOwnerResults").style.display = "none";
    }
    else {
        dojo.byId("uxGetMoreOwnerResults").style.display = "block";
    }

    if (_currentOwnerRecord > _ownerSearchResultsPageSize) {
        dojo.byId("uxGetPreviousOwnerResults").style.display = "block";
    }
}

function ShowPreviousOwnerSearchResults() {
    var content = "<table id='uxOwnerResultTable'>";
    var numFeatures = featureSet.features.length;
    var startRecord = _currentOwnerRecord - (_ownerSearchResultsPageSize + _currentPageSize);

    _currentPageSize=0;

    for (var i = startRecord; i < numFeatures && i < _ownerSearchResultsPageSize + startRecord; i++) {
        var graphic = featureSet.features[i];
        content += "<tr><td width='125px'><a href='javascript:GetRelationParcelDetails(featureSet.features[" + i + "]);'>" + getFieldValue(graphic, keyField) + "</a></td>";
        content += "<td width='*'>" + getFieldValue(graphic, addressField) + "</td></tr>";
        _currentPageSize++;
    }

    content += "</table>";
    dojo.place(content, "uxOwnerResultTable", "replace");

    dojo.byId("uxGetMoreOwnerResults").style.display = "block";
    dojo.byId("uxGetPreviousOwnerResults").style.display = "block";

    _currentOwnerRecord = startRecord + _currentPageSize;

    //Hide link if we've reached the limit
    if (i == _ownerSearchResultsPageSize) {
        dojo.byId("uxGetPreviousOwnerResults").style.display = "none";
    }


}

function searchByMapClick(evt) {
    showLoading();
   
    //create the QueryTask and Query Parameters objects
    var ownerQueryTask = new esri.tasks.QueryTask(_parcelFeatureLayer + "/48");

    var ownerQuery = new esri.tasks.Query();
    ownerQuery.returnGeometry = true;
    ownerQuery.outFields = ["*"];
    //get the map click point
    ownerQuery.geometry = evt.mapPoint;
    ownerQuery.where = "";
    //execute the query
    ownerQueryTask.execute(ownerQuery, function (fset) {
        if (fset.features.length > 0) {
           
            //Look up 911 Info From Address Table
            handleMapClickCallback(fset);
        }
        else {
           
            alert("No Tax Parcels found Try again");
        }
        hideLoading();
    });
}

function handleMapClickCallback(fset) {
    if (fset.features.length == 1) {
       
        GetReverseRelationParcelDetails(fset.features[0]);
    }
    else {

        featureSet = fset;
        var numFeatures = fset.features.length;

        //content for the table
        var content = "<table>";
        for (var i = 0; i < numFeatures; i++) {
            var graphic = fset.features[i];
            content += "<tr><td width='80px'><a href='javascript:GetReverseRelationParcelDetails(featureSet.features[" + i + "]);'>" + getFieldValue(graphic, keyField) + "</a></td>";
            content += "<td width='*'>" + getFieldValue(graphic, addressField) + "</td></tr>";
        }
        content += "</table>";

        searchResults = null;

        var searchString = "<html><head></head><body>" + content + "</body></html>";
        dojo.place(content, "uxGrid0");
    }
}

function GetReverseRelationParcelDetails(graphic) {
    _searchResultFeature = graphic;
    var relatedParcelQuery = new esri.tasks.RelationshipQuery();
    relatedParcelQuery.outFields = ["*"];
    relatedParcelQuery.relationshipId = 1;
    relatedParcelQuery.returnGeometry = true;
    objId = graphic.attributes.OBJECTID;
    relationFlds = graphic.attributes;
    relatedParcelQuery.objectIds = [graphic.attributes.OBJECTID];

    var fl = new esri.layers.FeatureLayer(_parcelFeatureLayer + "/48", {
        mode: esri.layers.FeatureLayer.MODE_SNAPSHOT,
        outFields: ["*"]
    });

    fl.queryRelatedFeatures(relatedParcelQuery, queryParcelReverseRelationComplete, queryParcelRelationError);

}

function queryParcelReverseRelationComplete(relatedRecords) {
    var fset = relatedRecords[objId];

    if (fset && fset.features.length > 0) {
        fset.features[0].geometry = _searchResultFeature.geometry;
        _searchResultFeature.attributes = fset.features[0].attributes;
        Query911Data(fset.features[0]);
    }
    else {
        hideLoading();
        
        alert("No Tax Parcels found Try again");
    }
}


var _searchResultFeature = ""; //Hold the currently selected owner search result

function GetRelationParcelDetails(graphic) {
    showLoading();
    _searchResultFeature = graphic;
   var relatedParcelQuery = new esri.tasks.RelationshipQuery();
   relatedParcelQuery.outFields = ["*"];
   relatedParcelQuery.relationshipId = 1;
   relatedParcelQuery.returnGeometry = true;
   objId = graphic.attributes.OBJECTID;
   relationFlds = graphic.attributes;
   relatedParcelQuery.objectIds = [graphic.attributes.OBJECTID];
   
   gpdataFeatureLayer.queryRelatedFeatures(relatedParcelQuery,queryParcelRelationComplete,queryParcelRelationError);
      
}

function queryParcelRelationComplete(relatedRecords) {
    var fset = relatedRecords[objId];
    //Go get 911 Details
    if (fset.features.length > 0) {
        Query911Data(fset.features[0]);
    }
    else {
        hideLoading();
        
        alert("No Tax Parcels found Try again");
    }
}

function  queryParcelRelationError(error) {
    alert("Error performing query relationship " + error.message);
    hideLoading();
}


function Query911Data(parcelFeature) {

    var addyQueryTask = new esri.tasks.IdentifyTask(_LayersLayer); //See config for URL settings
    var addyQuery = new esri.tasks.IdentifyParameters();
    addyQuery.tolerance = 3;
    addyQuery.geometry = parcelFeature.geometry;
    addyQuery.returnGeometry = false;
    addyQuery.layerIds = [7, 8, 15];
    addyQuery.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_ALL;
    addyQuery.width = map.width;
    addyQuery.height = map.height;
    addyQuery.mapExtent = map.extent;

    //execute the query
    addyQueryTask.execute(addyQuery, function (results) {

        if (results.length > 0) {
           
            //display information to the user
            var ems, fire, police, muni;
            if (results[0] && results[0].feature && results[0].feature.attributes.EMS) {
                ems = results[0].feature.attributes.EMS;
            }
            else {
                ems = _NAString;
            }

            if (results[1] && results[1].feature && results[1].feature.attributes.FIRE) {
                fire = results[1].feature.attributes.FIRE;
            }
            else {
                fire = _NAString;
            }

            if (results[2] && results[2].feature && results[2].feature.attributes.POLICE) {
                police = results[2].feature.attributes.POLICE;
            }
            else {
                police = _NAString;
            }

            if (results[2] && results[2].feature && results[2].feature.attributes.MUNICIPAL) {
                muni = results[2].feature.attributes.MUNICIPAL;
            }
            else {
                muni = _NAString;
            }
            _searchResultFeature.attributes.EMS = ems;
            _searchResultFeature.attributes.FIRE = fire;
            _searchResultFeature.attributes.POLICE = police;
            _searchResultFeature.attributes.MUNICIPAL = muni;
            _searchResultFeature.geometry = parcelFeature.geometry;

            showFeature3(fields, _searchResultFeature);
        }
        else {
          
            alert("No Tax Parcels found Try again");
        }
        hideLoading();
    });
}

function GetVotingAndAreaInfo(point) {
    identifyParams.geometry = point;
    identifyParams.mapExtent = map.extent;
    identifyParams.width = map.width;
    identifyParams.height = map.height;
    identifyTask.execute(identifyParams, function (idResults) { addToMap(idResults, point); });
}

