﻿
var fieldAlias;
var idInitHasRun = false;
function initIdentify() 
{
    var selectedIndex = dojo.byId("mapDocumentddl").selectedIndex;
    
    //having 'text' in the list.  Anything after 'Disturbance Index will be selectedIndex + 1
    var TextIndex = checkDDLTextIndex(selectedIndex);
    if (TextIndex) {
        selectedIndex = selectedIndex - 1;
    }
    
    
       
    identifyTask = new esri.tasks.IdentifyTask(dojo.byId("mapDocumentddl").value);
    identifyParams = new esri.tasks.IdentifyParameters();
    identifyParams.tolerance = 3;
    identifyParams.returnGeometry = true;
   
    layerFieldArray = new Array();
    layerIdArray = new Array();
    layerNameArray = new Array();
    // build the list of layer ids 
    xmlDoc = getXMLDoc("data/settings.xml");
    var mapService = xmlDoc.getElementsByTagName("Map")[selectedIndex];
    var layerList = new Array();
    for (i = 0; i < mapService.getElementsByTagName("Identify").length; i++) {
       var layerName = mapService.getElementsByTagName('LayerName')[i].childNodes[0].nodeValue;
       var fieldName = mapService.getElementsByTagName('FieldName')[i].childNodes[0].nodeValue;
       var layerID = mapService.getElementsByTagName('LayerId')[i].childNodes[0].nodeValue;
       
       layerFieldArray.push(fieldName);
       layerIdArray.push(layerID);
       layerNameArray.push(layerName);
       layerList[i] = layerID;
       
    }
    identifyParams.layerIds = layerList;
    identifyParams.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_ALL;  
    resetTabText();

}

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 resetTabText()
{
    if ( idInitHasRun == true )
    {
        var idTab = dojo.byId("IdentifyTab");
        var text = "Select the Identify button in the toolbar and click on the map to get information";
        idTab.innerHTML = text;
    }
    idInitHasRun = true;
    
}

function doIdentify(evt) 
{
    showLoading();
    map.graphics.clear();
    identifyParams.geometry = evt.mapPoint;
    identifyParams.mapExtent = map.extent;
    identifyTask.execute(identifyParams, function(idResults) { addToMap(idResults, evt); });
}


function addToMap(idResults, evt) 
{   
    var index;
    var layerHeader = "";
    layerResultsArray = new Array();
    var tabIdentify = document.getElementById("IdentifyTab");
    
    // get attributes for each layer identified
    for (index in identifyParams.layerIds){
        var layerId = identifyParams.layerIds[index];
        var resultList = {displayFieldName:null,features:[]};
        // put each result set in a global array to be refereced later by the showfeature function
        layerResultsArray.push(resultList);
                
        for (var i=0, il=idResults.length; i<il; i++) {
            var idResult = idResults[i];
            if (idResult.layerId == layerId) {
                if (!resultList.displayFieldName) {resultList.displayFieldName = idResult.displayFieldName};
                    resultList.features.push(idResult.feature);
                } 
            }
            var layerName = layerNameArray[index];
            var displayName = resultList.displayFieldName;
                        
            layerHeader += '<table id="layer' + layerId + '"  width="248" cellpadding="0" cellspacing="0"> \r\n'; 
            layerHeader +=  '<tr>\r\n' +
                                '<td>\r\n' +
                                    '<table width="100%" cellpadding="0" cellspacing="0">\r\n'+
                                        '<tr>\r\n'+
                                            
                                            '<td style="overflow: hidden" class="accordionheaderid"> &nbsp; <b>' + layerName + ' </b><i>(' + resultList.features.length + ' found)</i></td>\r\n'+
                                            '<td  id="toggle'+layerName+'" class="accordionheaderid accordionbutton" onclick="accordionize(\'idL'+layerName+'\', \'toggle'+layerName+'\')">&#9660;&nbsp;</td>\r\n'+
                                        '</tr>\r\n'+
                                    '</table>\r\n'+
                                '</td>\r\n'+
                            '</tr>\r\n';
           
            //layerHeader += '<tr><td id="toggle'+layerName+index+'" class="accordionheaderid accordionbutton" onclick="accordionize(\'idL'+layerName+index+'\', \'toggle'+layerName+index+'\')">&#9660;&nbsp;</td>';
            //layerHeader += '<td style="overflow: hidden" class="accordionheaderid"> &nbsp; <b>' + layerName + '</b><i>(' + resultList.features.length + ' found)</i></td></tr>';
            // second row to hold contents of layer identify

            //ke
//            var content = layerTabContent(resultList, index);
            var content = layerTabContent(layerName, resultList, index);
            
            layerHeader += '<tr id="idL'+layerName+'" style="display: none">\r\n';
            layerHeader += '<td>\r\n';
            layerHeader += '<table width="248" cellpadding="0" cellspacing="0">\r\n';
            layerHeader += '<tr>\r\n';
            layerHeader += '<td>\r\n';
            layerHeader = layerHeader + content;
            layerHeader += '</td>\r\n';
            layerHeader += '</tr>\r\n';
            layerHeader += '</table>\r\n';
            layerHeader += '</td>\r\n';
            layerHeader += '</tr>\r\n';
            layerHeader += '</table>\r\n';
        
    }
    tabIdentify.innerHTML = layerHeader;
    hideLoading();
   
}

function layerTabContent(layerName, layerResults, resultArrayIndex) 
{
    var content = "";
    var items= "";
    var idL = layerResults.displayFieldName;
    // remove any white space in the idLabel
    // var idLabel = idL.replace(/^\s+|\s+$/g, ' ');
    var IdLabel = null;
    if (layerResults.displayFieldName != null) {
      var idLabel = stripExcessSpace(idL);
    }
    
    
    //content = "<i>Total features returned: " + layerResults.features.length + "</i>";
    //content = '<table id="' + idLabel + resultArrayIndex + '"  width="100%" cellpadding="0" cellspacing="0"> ';  
    for (var i=0, il=layerResults.features.length; i<il; i++) {
      content += '<table id="' + idLabel + i + '"  width="248" cellpadding="0" cellspacing="0">\r\n';
        content += '<tr>\r\n<td>\r\n<table width="100%" cellpadding="2" cellspacing="0">\r\n';

        sp = layerResults.features[i].getContent().split("<br/>");
//ke
        var useRegionXML = false;
        var matchString = layerName.search("Disturbance");
//ke - also change out Barriers above
            if (matchString != -1) {
                useRegionXML = true;
            }

            
        if ( idLabel.toUpperCase()=="WATERSHED" || idLabel.toUpperCase()=="REGION") {
            useRegionXML = true;
            } 
          
//      ke

//        if ( idLabel.toUpperCase()=="WATERSHED" || idLabel.toUpperCase()=="REGION"){   
        if (useRegionXML == true) {
            if (i==0)
            {
                content+=   '<tr>\r\n'+
                                
                                '<td style="overflow: hidden" class="accordionheaderidSub"> &nbsp; <b>' +layerResults.features[i].attributes[layerFieldArray[resultArrayIndex]]+ '</b>\r\n'+
                                    "<a id=a"+idLabel+i+" href='#' onclick='showFeature(layerResultsArray[" + resultArrayIndex + "].features[" + i + "], \"featId" +idLabel+i+"\"); return false;'>(show)</a>\r\n"+
                                    "<a href='#' onclick='printFeature(layerResultsArray[" + resultArrayIndex + "].features[" + i + "], \"" +resultArrayIndex+"\"); return false;'> (print)</a>\r\n"+
                                '</td>\r\n'+
                                '<td id="toggle' + idLabel + i + '" class="accordionheaderidSub accordionbutton" onclick="accordionize(\'idL' + idLabel + i + '\', \'toggle' + idLabel + i + '\')">&#9650;&nbsp;</td>\r\n' +
                            '</tr>\r\n'+
                        '</table>\r\n'+
                    '</td>\r\n'+
                '</tr>\r\n'+
                '<tr id="idL'+idLabel+i+'" style="display: block">\r\n<td>\r\n';
            }
            else
            {
                 content+=   '<tr>\r\n'+
                                
                                '<td style="overflow: hidden" class="accordionheaderidSub"> &nbsp; <b>' +layerResults.features[i].attributes[layerFieldArray[resultArrayIndex]]+ '</b>\r\n'+
                                    "<a id=a"+idLabel+i+" href='#' onclick='showFeature(layerResultsArray[" + resultArrayIndex + "].features[" + i + "], \"featId" +idLabel+i+"\"); return false;'>(show)</a>\r\n"+
                                    "<a href='#' onclick='printFeature(layerResultsArray[" + resultArrayIndex + "].features[" + i + "], \"" +resultArrayIndex+"\"); return false;'> (print)</a>\r\n"+
                                '</td>\r\n'+
                                '<td id="toggle' + idLabel + i + '" class="accordionheaderidSub accordionbutton" onclick="accordionize(\'idL' + idLabel + i + '\', \'toggle' + idLabel + i + '\')">&#9660;&nbsp;</td>\r\n' +
                            '</tr>\r\n'+
                        '</table>\r\n'+
                    '</td>\r\n'+
                '</tr>\r\n'+
                '<tr id="idL'+idLabel+i+'" style="display: none">\r\n<td>\r\n';
                
            }
            content += '<table width="100%" cellpadding="2" cellspacing="0">\r\n<tr>\r\n<td>';
                 
            var attributes = layerResults.features[0].attributes;
            //content += GetIdentifyHTML(attributes);
            var w = dojo.byId("mapDocumentddl").selectedIndex;
            
            var servicefulltext = dojo.byId("mapDocumentddl").options[w].text;
            
            //get rid of padding in the text field in mapDocumentddl
            var matchString = servicefulltext.search("Disturbance");
            if (matchString != -1) {
                var service = servicefulltext.slice(3, servicefulltext.length);
            }
            else {
                service = servicefulltext;
            }
            
            XML = XmlFromIdentify(idLabel, service, layerResults.features[i].attributes);
          // XML = XmlFromIdentify('Watershed', service, layerResults.features[i].attributes);
            if(navigator.appName == "Microsoft Internet Explorer"){
                var xslDoc =  getXMLDoc("data/identify.xslt"); 
                content += XML.transformNode(xslDoc);
                }
            else{
                //Create an XSLT processor instance
                var processor = new XSLTProcessor();
                //Create an empty XML document for the XSLT transform
                var transform = getXMLDoc("data/identify.xslt");
                //transform.async = false;
                //Load the XSLT
                //transform.load("data/identify.xslt");
                processor.importStylesheet(transform);
                var htmlobj = processor.transformToDocument(XML);
                //alert(htmlobj.childNodes[0].innerHTML);
                content += htmlobj.childNodes[0].innerHTML;
                
            }  
        }
        else{
            if (i==0)
            {
                content+=   '<tr>\r\n'+
                                '<td style="overflow: hidden" class="accordionheaderidSub"> &nbsp; <b>' +layerResults.features[i].attributes[layerFieldArray[resultArrayIndex]]+ '</b>\r\n'+
                                    "<a id=a"+idLabel+i+" href='#' onclick='showFeature(layerResultsArray[" + resultArrayIndex + "].features[" + i + "], \"featId" +idLabel+i+"\"); return false;'>(show)</a>\r\n"+
                                    "\r\n"+
                                '</td>\r\n'+
                                '<td id="toggle'+idLabel+i+'" class="accordionheaderidSub accordionbutton" onclick="accordionize(\'idL'+idLabel+i+'\', \'toggle'+idLabel+i+'\')">&#9650;&nbsp;</td>\r\n' +
                            '</tr>\r\n'+
                        '</table>\r\n'+
                    '</td>\r\n'+
                '</tr>\r\n'+
                '<tr id="idL'+idLabel+i+'" style="display: block">\r\n<td>\r\n';
            }
            else
            {
                 content+=   '<tr>\r\n'+
                                
                                '<td style="overflow: hidden" class="accordionheaderidSub"> &nbsp; <b>' +layerResults.features[i].attributes[layerFieldArray[resultArrayIndex]]+ '</b>\r\n'+
                                    "<a id=a"+idLabel+i+" href='#' onclick='showFeature(layerResultsArray[" + resultArrayIndex + "].features[" + i + "], \"featId" +idLabel+i+"\"); return false;'>(show)</a>\r\n"+
                                    "\r\n"+
                                '</td>\r\n'+
                                '<td id="toggle'+idLabel+i+'" class="accordionheaderidSub accordionbutton" onclick="accordionize(\'idL'+idLabel+i+'\', \'toggle'+idLabel+i+'\')">&#9660;&nbsp;</td>\r\n' +
                            '</tr>\r\n'+
                        '</table>\r\n'+
                    '</td>\r\n'+
                '</tr>\r\n'+
                '<tr id="idL'+idLabel+i+'" style="display: none">\r\n<td>\r\n';
                
            }
            content += '<table width="100%" width="248" cellpadding="2" cellspacing="0">\r\n<tr>\r\n<td>';
            content += "<div style='padding-left:5px'>\r\n";
            content += "<table width='100%' cellpadding='2' cellspacing='0'>\r\n";
            for (var j=0, jl=sp.length; j<jl -1 ; j++)
            {
                var nvpair = sp[j].split("=");
                var colName = nvpair[0];
                var colValue = nvpair[1];
                // remove the url field becuase the slashes interfere with the tab width
                var newColName = colName.replace("/", "&#47");
                // replace url string with link                
                var k = colValue.indexOf('http');
                if (k==-1)
                {
                    //content+="<b>"+colName+": </b>"+colValue+"<br />";
                    content += "<tr>\r\n<td style='font-family:Verdana; font-size: 8pt;'>"+newColName+": </td>\r\n<td style='font-family:Verdana; font-size: 8pt;'>"+colValue+"</td>\r\n</tr>\r\n";
                }
                else
                {
                   //content += "<tr><td style='font-family:Verdana; font-size: 8pt;'>"+newColName+": </td><td style='font-family:Verdana; font-size: 8pt;'><a href="+colValue+">http:link</a></td></tr>";
                   content += "<tr>\r\n<td style='font-family:Verdana; font-size: 8pt;'>"+newColName+": </td>\r\n";
                   content += "<td style='font-family:Verdana; font-size: 8pt; cursor:hand; color:blue;' onClick=\"window.open('"+colValue+"','featurewindow')\"><b>(html:link)</b></td>\r\n</tr>\r\n";
                   
                }
                
            }
            content += "</table>\r\n</div>\r\n</td>";
            
       } 
        content += "</tr>\r\n</table>\r\n</td>\r\n</tr>\r\n";
        content+="</table>\r\n";
    }
    
    return content;
}

//Shows the selected feature being identified in the identify tool

function showFeature(feature, featId) 
{
        var refId = featId.replace(/featId/, "a");
        if (featId == previousFeature){
            map.graphics.clear();
            previousFeature = "";
            dojo.byId(refId).innerHTML = "(show)";
        }
        else{
          map.graphics.clear();
          if (feature.geometry.type == "point") {
            feature.setSymbol(pointSymbol);
          }
          else if (feature.geometry.type == "polyline") {
            feature.setSymbol(lineSymbol);
          }
          else 
          {
            feature.setSymbol(symbol);
          }
            //feature.setSymbol(symbol);
            map.graphics.add(feature);
            
            previousFeature = featId;
            dojo.byId(refId).innerHTML = "(hide)";
        }
}

function printFeature(feature, index)
{
    var w = dojo.byId("mapDocumentddl").selectedIndex;
    //having 'text' in the list.  Anything after 'Disturbance Index will be selectedIndex - 1
    var TextIndex = checkDDLTextIndex(w);
    if (TextIndex) {
        w = w-1;
    }
    
    //get rid of left hand spaces in text
    var servicefulltext = dojo.byId("mapDocumentddl").options[w].text;
    var matchString = servicefulltext.search("Disturbance");
    if (matchString != -1) {
        var service = servicefulltext.slice(3, servicefulltext.length);
    }
    else {
        service = servicefulltext;
    }
    var service = dojo.byId("mapDocumentddl").options[w].text;
    var layer = layerNameArray[index];
    var featureTitle = feature.getTitle().split("<br/>");
    var nvpair = featureTitle[0].split("= ");
    
    //var featureName = nvpair[1];
    var featureName = feature.attributes[layer];
    if (!featureName){
        featureName = feature.attributes[layer.toUpperCase()];
        }
        
    var hrefName = location.href;
    var hrefPath = hrefName.replace("index.html", "");
    if (hrefPath.indexOf("#") != -1){
        hrefPath = hrefPath.replace("#", "");
    }
    var ref = hrefPath + "PrinterFriendlyStats.html?service=" + service + "&layer=" + layer + "&featureid=" + featureName;
    window.open(ref, 'printWindow');
  
}

