﻿
var fieldAlias;
var idInitHasRun = false;
function initIdentify() 
{
    var selectedIndex = dojo.byId("mapDocumentddl").selectedIndex;
       
    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 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
            var content = layerTabContent(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(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/>");
        if ( idLabel.toUpperCase()=="WATERSHED" || idLabel.toUpperCase()=="REGION"){   
            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 service = dojo.byId("mapDocumentddl").options[w].text;
            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;
    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];
    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');
  
}
