﻿
var queryField = "";
var queryLayerId = "";
var queryTitle = "";

function populateLocatorDDL(){
    var selectedIndex = dojo.byId("mapDocumentddl").selectedIndex;

    var TextIndex = checkDDLTextIndex(selectedIndex);
    if (TextIndex) {
        selectedIndex = selectedIndex - 1;
   }
    
    xmlDoc = getXMLDoc("data/settings.xml");
    var mapXMLElements = xmlDoc.getElementsByTagName("Map")[selectedIndex];
    for (var k = dojo.byId("locatorSelect").length -1; k >= 0 ; k--) 
    {
        dojo.byId("locatorSelect").remove(k);
    }
  
    for (var i = 0; i < mapXMLElements.getElementsByTagName("GeoLocator").length; i++) {
       
 
       queryTitle = mapXMLElements.getElementsByTagName('title')[i].childNodes[0].nodeValue;
       queryLayerId = mapXMLElements.getElementsByTagName('layerid')[i].childNodes[0].nodeValue;
       queryField = mapXMLElements.getElementsByTagName('field')[i].childNodes[0].nodeValue;
       
       var locatorOption = document.createElement('option');
       locatorOption.text = queryTitle;
       locatorOption.value = queryField;
       // check for browser compatability
       if(navigator.appName == "Microsoft Internet Explorer"){
            dojo.byId("locatorSelect").add(locatorOption);
       }
       else{
            dojo.byId("locatorSelect").appendChild(locatorOption);
       }
       
 
       }
       
       //if not geolocator, send to showblankLocator function, otherwise continue with initQuery
       
       if (mapXMLElements.getElementsByTagName("GeoLocator").length == 0) {
       
            showBlankLocator();
       }
       else{
             initQuery();
       }
   
    
    
}

function checkDDLTextIndex(SelectedIndex) {
    var decreaseValue = false;
    var myObject = dojo.byId("mapDocumentddl")
    for (var i = 0; i < SelectedIndex; i++) {
        var textname = myObject.children[i].text;
        if (textname == "KR Disturbance Index") {
            decreaseValue = true;
        }
    }
    return decreaseValue;

}


function initQuery() {
    //build query
    // get the index of the selecte service
    var selectedIndex = dojo.byId("mapDocumentddl").selectedIndex;
    
    //correct selectedIndex
    var TextIndex = checkDDLTextIndex(selectedIndex);
    if (TextIndex) {
        selectedIndex = selectedIndex - 1;
    }
    // get the index of the selected map layer
    var selectedLocatorIndex = dojo.byId("locatorSelect").selectedIndex;
    
    xmlDoc = getXMLDoc("data/settings.xml");
    var mapXMLElements = xmlDoc.getElementsByTagName("Map")[selectedIndex];
    queryTitle = mapXMLElements.getElementsByTagName('title')[selectedLocatorIndex].childNodes[0].nodeValue;
    queryLayerId = mapXMLElements.getElementsByTagName('layerid')[selectedLocatorIndex].childNodes[0].nodeValue;
    queryField = mapXMLElements.getElementsByTagName('field')[selectedLocatorIndex].childNodes[0].nodeValue;
             
    queryTask = new esri.tasks.QueryTask(dojo.byId("mapDocumentddl").value + "/" + queryLayerId);
    //build query filter
    query = new esri.tasks.Query();
    query.returnGeometry = true;
    //query.outFields = ['*'];
    executeQuery(queryField);
}

function executeQuery(fieldName) {
    if (fieldName != null)
    {
        query.where = fieldName + " <> ''";
    }
        //execute query
        queryTask.execute(query,showResults);
}

function showResults(results) {
        var content = "";
        var sortArray = [];
        // here we are going to put the watershed text names into an array to sort
        // also we need to replace single quotes in the name with &#39
        for (var i=0, il=results.features.length; i<il; i++) {
            var text = results.features[i].attributes[queryField];
            var newText = text.replace(/'/g, "&#39");
            sortArray[i] = newText;
        }
        sortArray.sort();
       
        content = "<html><body><div style='padding-left:5px; padding-top:5px'><table>";
        content += "<tr><td><b>Zoom To " + queryTitle + " features</b></td></tr>";
        for (var i=0, il=sortArray.length; i<il; i++) {
          var featureAttributes = sortArray[i];
          content = content + "<tr><td> <a style='font-family:Verdana; font-size: 8pt;' href='#' onclick='zoomToFeature(" + '"' + featureAttributes + '"' + "); return false;'>" + featureAttributes + "</a></td></tr>"; 
        }
        content = content + "</table></div></body></html>";
        
        dojo.byId("locatorBody").innerHTML = content;
        
}

function showBlankLocator() {
        
        var content = "";
           
        content = "<html><body><div style='padding-left:5px; padding-top:5px'><table>";
        content += "<tr><td><b>There is no locator available for this Layer</b></td></tr>";
        content = content + "</table></div></body></html>";
        
        dojo.byId("locatorBody").innerHTML = content;
        
}

var findSearchText = "";
function zoomToFeature(searchText){
    // The query task does not return the geometry so we are doing a find here to get the geometry    
    var find, params;

    find = new esri.tasks.FindTask(dojo.byId("mapDocumentddl").value);
    params = new esri.tasks.FindParameters();
    params.layerIds = [queryLayerId];
    params.searchFields = [queryField];
    params.searchText = searchText;
    findSearchText = searchText;
    params.returnGeometry = true;
    find.execute(params, showFindResults);

}

function showFindResults(results){
    // Mapextent to the resulting feature
    if (results.length == 1)
    {
        var graphic = results[0].feature;
        map.setExtent(graphic.geometry.getExtent()); 
    }else if (results.length > 1)
    {
        // we have to find which feature we are looking for based on the original search text.
        for (var i=0, il=results.length; i<il; i++) 
        {
            var value = results[i].value;
            if (findSearchText == results[i].value)
            {
                var graphic = results[i].feature;
                map.setExtent(graphic.geometry.getExtent()); 
            } 
        }
    }  
}


