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 + "/47");//GPDATA
    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");
        }
    });
}

// Search by Address
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 + "/47");//GPDATA
    var addyQuery = new esri.tasks.Query();
    addyQuery.returnGeometry = true;
    addyQuery.outFields = ["*"];
    if (dojo.indexOf(searchText, ' ') == -1) {
        addyQuery.where = "propaddr LIKE '%" + searchText + "%'";
    }
    else {
        var spacePos = dojo.indexOf(searchText, ' ');
        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 + "/47");//GPDATA
    var ownerQuery = new esri.tasks.Query();
    ownerQuery.returnGeometry = true;
    ownerQuery.outFields = ["*"];
    ownerQuery.where = "parcelid  LIKE '%" + searchText + "%'";
    
    //execute the query
    ownerQueryTask.execute(ownerQuery, function(fset){
        if (fset.features.length > 0) {
            //Look up 911 Info From Address Table
            handleParcelIDCallback(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(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 + "/47");//GPDATA
    var ownerQuery = new esri.tasks.Query();
    ownerQuery.returnGeometry = true;
    ownerQuery.outFields = ["*"];
    ownerQuery.where = "cmap ='" + sb1 + "' AND gp = '" + sb2 + "' 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 + "]);'>" + graphic.attributes.owner + "</a></td>";
            content += "<td width='*'>" + graphic.attributes.propaddr + "</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;
        var numFeatures = fset.features.length;
        //resultsText = "results";
        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>";
            content += "<td width='*'>" + graphic.attributes.owner + "</td></tr>";
        }
        _currentOwnerRecord = i;
        _currentPageSize = i;
        content += "</table>";
        searchResults = null;
        dojo.place(content, "uxGridARL");
        
        if (numFeatures > _ownerSearchResultsPageSize) {
            dojo.place('<div id="uxGetMoreAddressResults" onclick="GetMoreAddressSearchResults()" style="cursor: pointer;float: right;margin-top: 15px;margin-bottom: 15px;text-decoration: underline;font-size: 12px;">Next ' + _ownerSearchResultsPageSize + ' results</div>', "uxGridARL");
            dojo.place('<div id="uxGetPreviousAddressResults" onclick="ShowPreviousAddressSearchResults()" style="cursor: pointer;float: left;margin-bottom: 15px;margin-top: 15px;text-decoration: underline;font-size: 12px;display:none;">Last ' + _ownerSearchResultsPageSize + ' results</div>', "uxGridARL");
        }
        hideLoading();
    }
}

function handleParcelIDCallback(fset){
    //Clear results pane
    dojo.place("<div></div>", "uxGrid1", "only");
    if (fset.features.length == 1) {
    
        GetRelationParcelDetails(fset.features[0]);
    }
    else {
        //Sort results by Parcel ID
        fset.features = fset.features.sort(function(a, b){
            return a.attributes.parcelid > b.attributes.parcelid ? 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='uxParcelIDResultTable'>";
        for (var i = 0; i < numFeatures && i < 15; i++) {
            var graphic = fset.features[i];
            var pid = graphic.attributes.parcelid;
            
            content += "<tr><td width='200px'><a href='javascript:GetRelationParcelDetails(featureSet.features[" + i + "]);'>" + pid + "</a></td>";
        }
        _currentOwnerRecord = i;
        _currentPageSize = i;
        content += "</table>";
        searchResults = null;
        dojo.place(content, "uxGrid1");
        
        if (numFeatures > _ownerSearchResultsPageSize) {
            dojo.place('<div id="uxGetMoreParcelIDResults" onclick="GetMoreParcelIDSearchResults()" style="cursor: pointer;float: right;margin-top: 15px;margin-bottom: 15px;text-decoration: underline;font-size: 12px;">Next ' + _ownerSearchResultsPageSize + ' results</div>', "uxGrid1");
            dojo.place('<div id="uxGetPreviousParcelIDResults" onclick="ShowPreviousParcelIDSearchResults()" style="cursor: pointer;float: left;margin-bottom: 15px;margin-top: 15px;text-decoration: underline;font-size: 12px;display:none;">Last ' + _ownerSearchResultsPageSize + ' results</div>', "uxGrid1");
        }
        hideLoading();
    }
}

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 + "]);'>" + graphic.attributes.owner + "</a></td>";
        content += "<td width='*'>" + graphic.attributes.propaddr + "</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 + "]);'>" + graphic.attributes.owner + "</a></td>";
        content += "<td width='*'>" + graphic.attributes.propaddr + "</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 GetMoreAddressSearchResults(){
    var content = "<table id='uxAddressResultTable'>";
    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 + "]);'>" + graphic.attributes.propaddr + "</a></td>";
        content += "<td width='*'>" + graphic.attributes.owner + "</td></tr>";
        _currentPageSize++;
    }
    content += "</table>";
    dojo.place(content, "uxAddressResultTable", "replace");
    _currentOwnerRecord = i;
    
    //Hide link if we've reached the limit
    if (_currentOwnerRecord >= numFeatures) {
        dojo.byId("uxGetMoreAddressResults").style.display = "none";
    }
    else {
        dojo.byId("uxGetMoreAddressResults").style.display = "block";
    }
    
    if (_currentOwnerRecord > _ownerSearchResultsPageSize) {
        dojo.byId("uxGetPreviousAddressResults").style.display = "block";
    }
}

function ShowPreviousAddressSearchResults(){
    var content = "<table id='uxAddressResultTable'>";
    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 + "]);'>" + graphic.attributes.propaddr + "</a></td>";
        content += "<td width='*'>" + graphic.attributes.owner + "</td></tr>";
        _currentPageSize++;
    }
    
    content += "</table>";
    dojo.place(content, "uxAddressResultTable", "replace");
    dojo.byId("uxGetMoreAddressResults").style.display = "block";
    dojo.byId("uxGetPreviousAddressResults").style.display = "block";
    _currentOwnerRecord = startRecord + _currentPageSize;
    
    //Hide link if we've reached the limit
    if (i == _ownerSearchResultsPageSize) {
        dojo.byId("uxGetPreviousAddressResults").style.display = "none";
    }
}

function GetMoreParcelIDSearchResults(){
    var content = "<table id='uxParcelIDResultTable'>";
    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='200px'><a href='javascript:GetRelationParcelDetails(featureSet.features[" + i + "]);'>" + graphic.attributes.parcelid + "</a></td>";
        _currentPageSize++;
    }
    content += "</table>";
    dojo.place(content, "uxParcelIDResultTable", "replace");
    _currentOwnerRecord = i;
    
    //Hide link if we've reached the limit
    if (_currentOwnerRecord >= numFeatures) {
        dojo.byId("uxGetMoreParcelIDResults").style.display = "none";
    }
    else {
        dojo.byId("uxGetMoreParcelIDResults").style.display = "block";
    }
    
    if (_currentOwnerRecord > _ownerSearchResultsPageSize) {
        dojo.byId("uxGetPreviousParcelIDResults").style.display = "block";
    }
}

function ShowPreviousParcelIDSearchResults(){
    var content = "<table id='uxParcelIDResultTable'>";
    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='200px'><a href='javascript:GetRelationParcelDetails(featureSet.features[" + i + "]);'>" + graphic.attributes.parcelid + "</a></td>";
        _currentPageSize++;
    }
    
    content += "</table>";
    dojo.place(content, "uxParcelIDResultTable", "replace");
    dojo.byId("uxGetMoreParcelIDResults").style.display = "block";
    dojo.byId("uxGetPreviousParcelIDResults").style.display = "block";
    _currentOwnerRecord = startRecord + _currentPageSize;
    
    //Hide link if we've reached the limit
    if (i == _ownerSearchResultsPageSize) {
        dojo.byId("uxGetPreviousParcelIDResults").style.display = "none";
    }
}

function searchByMapClick(evt){
    showLoading();
    
    //create the QueryTask and Query Parameters objects
    var ownerQueryTask = new esri.tasks.QueryTask(_parcelFeatureLayer + "/46");//parcel feature layer
    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 + "/46", //parcel feature layer
    {
        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]);  //Geojobe Removing this (same as decatur - no police/fire/ems data to query)
        showFeature3(fields, _searchResultFeature); //GEOJOBE added this (same as Decatur)
    }
    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]);  //GEOJOBE
        _searchResultFeature.geometry = fset.features[0].geometry; //Geojobe
        showFeature3(fields, _searchResultFeature); //GEOJOBE
    }
    else {
        hideLoading();
        alert("No Tax Parcels found Try again");
    }
}

function queryParcelRelationError(error){
    alert("Error performing query relationship " + error.message);
    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);
    });
}
