dojo.require("esri.map");
dojo.require("esri.tasks.query");
dojo.require("esri.tasks.identify");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.TabContainer");

  var layer, map, qLayer,visible = [];
  var cat, extentAndSR, prj, baseLayer, vis2 =[];
  var layer1results, layer2results, layer3results, layer4results, layer5results;
  var baseMap = "http://gis.co.hennepin.mn.us/ArcGIS/rest/services/Maps/HENN_CACHE_BASEMAP/MapServer";
  var functMap = "http://gis.co.hennepin.mn.us/ArcGIS/rest/services/Maps/HENN_DYNAMIC_STIMULUS/MapServer";
  var errorString = "An error occured with the map service, please try again.\nContact us if the issue persists.";
  var coLayer = 5;
  var identifyTask = new esri.tasks.IdentifyTask(functMap);
  var identifyParams = new esri.tasks.IdentifyParameters();

  function init() {
  	esri.config.defaults.io.proxyUrl = "gis_proxy/proxy.ashx";
	cat = dojo.byId("prjType").value.toLowerCase();
      try { //figure out if mapping a project page
          prj = dojo.byId("prjNum").value.toString();
      } catch (e) {
          prj = "none";
      }
   // extentAndSR = new esri.geometry.Extent(-93.825, 44.761, -93.173, 45.243, new esri.SpatialReference({ "wkid": 4326 }));
    map = new esri.Map("myMap"); //,{extent:extentAndSR, lods: lods});
    layer = new esri.layers.ArcGISDynamicMapServiceLayer(functMap);
    baseLayer = new esri.layers.ArcGISTiledMapServiceLayer(baseMap);
    map.addLayer(baseLayer);
    if (layer.loaded) {  //this conditional is for cross browser stuff.
      buildLayerList(layer);
    }
    else {
      dojo.connect(layer, "onLoad", buildLayerList);
    }
    dojo.connect(map, "onLoad", initFunctionality);
    dojo.connect(window, "onresize", resizeMap);
  }
  function initFunctionality(map) {  //Greg added
      dojo.connect(map, "onClick", doIdentify);
      if (dojo.isIE && dojo.isIE < 7) {
          var arg = { "w": 280, "h": 140 };
          dijit.byId("tabs").resize(arg);
      }
        dojo.connect(map.infoWindow, "onShow", function() { //Greg added
          dijit.byId("tabs").resize();
         });
        identifyParams.tolerance = 10;
        identifyParams.returnGeometry = true;
        identifyParams.layerIds = [0, 1, 2, 3, 4];
        identifyParams.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_ALL;
		map.infoWindow.resize(295, 210);
        map.infoWindow.setContent(dijit.byId("tabs").domNode);
        map.infoWindow.setTitle("Identify Results");
    }
 function doIdentify(evt) {
 	identifyParams.geometry = evt.mapPoint;
    identifyParams.mapExtent = map.extent;
    identifyTask.execute(identifyParams, function(idResults) { addToMap(idResults, evt); });
  }
  function addToMap(idResults, evt) { //Greg added
  	if (idResults.length == 0) {
      map.infoWindow.hide();
      return;
    }
    rsltCountStr="";
    var transCount = 0;
    var justiceCount = 0;
    var housingCount = 0;
    var healthCount = 0;
    var envCount = 0;
    layer1results = {Transportation:null,features:[]};
    layer2results = {Justice:null,features:[]};
    layer3results = {Housing:null,features:[]};
    layer4results = {Health:null,features:[]};
    layer5results = { Environment: null, features: [] };
    var graphic = idResults[0];
    var scrPt = map.toScreen(graphic.feature.geometry);  //convert the selected point location to screen location
    for (var i=0, il=idResults.length; i<il; i++) {
          var idResult = idResults[i];
          if (idResult.layerId === 0) { //transportation
            layer1results.features.push(idResult.feature); 
            transCount++; 
            dijit.byId('tabs').selectChild(dijit.byId('layer1Tab')); 
          } else if (idResult.layerId === 1) { //justice
            layer2results.features.push(idResult.feature);
            justiceCount++;  
            dijit.byId('tabs').selectChild(dijit.byId('layer2Tab')); 
          } else if (idResult.layerId === 2) {  //housing
            layer3results.features.push(idResult.feature);  
            housingCount++;   
            dijit.byId('tabs').selectChild(dijit.byId('layer3Tab')); 
          } else if (idResult.layerId === 3) {  //health
            layer4results.features.push(idResult.feature);
            healthCount++;   
            dijit.byId('tabs').selectChild(dijit.byId('layer4Tab')); 
          } else if (idResult.layerId === 4) {  //environment
            layer5results.features.push(idResult.feature);
            envCount++;  
            dijit.byId('tabs').selectChild(dijit.byId('layer5Tab')); 
          }
      }
  rsltCountStr = envCount + " Env., " + healthCount + " Health, " + housingCount + " Housing, " + justiceCount + " Justice, " + transCount + " Trans.";
  dijit.byId("layer1Tab").setContent(layerTabContent(layer1results, "Transportation"));
  dijit.byId("layer2Tab").setContent(layerTabContent(layer2results,"Justice"));
  dijit.byId("layer3Tab").setContent(layerTabContent(layer3results,"Housing"));
  dijit.byId("layer4Tab").setContent(layerTabContent(layer4results,"Health"));
  dijit.byId("layer5Tab").setContent(layerTabContent(layer5results,"Environment"));
  var title = "Projects by Category: <i>" + rsltCountStr + "</i>";
  map.infoWindow.setTitle("<span class=\"xSmallFont\">" + title + "</span>");
  map.infoWindow.show(scrPt, map.getInfoWindowAnchor(scrPt));
  map.infoWindow.style = "z-index:2000";
  }
  function layerTabContent(layerResults, layerName) { //Greg added
    var content = "";
    content = "<b>" + layerResults.features.length + " " + layerName + " project(s) found</b><hr width=\"90%\"/>";
        for (var i=0, il=layerResults.features.length; i<il; i++) {
            var cat = layerResults.features[i].attributes['NEW_WEBSITE_CATEGORY'];
            if (cat == "Health & Human Services") {
                cat = "health";
            } else if (cat == "Housing & Urban Development") { cat = "housing"; }
            if (i > 0) { content += "<hr />"; } //LOCATION SHOULD BE NEW_LOCATION_NAME_TXT for prod data.
            content += "<b>Location: </b>" + layerResults.features[i].attributes['NEW_LOCATION_NAME_TXT'] + "<br />";
            content += "<i>" + layerResults.features[i].attributes['NEW_WEBSITE_WEBTITLE'] + "</i><br />";
            if (layerResults.features[i].attributes['AWARD_AMOUNT'] != "Null") {
                content += "<b>Funds: </b>" + layerResults.features[i].attributes['AWARD_AMOUNT'] + "<br />";
            }
            content += "<b>Link: </b><a href='" + cat + "/" + layerResults.features[i].attributes['NEW_WEBSITE_WEBSITE'] + "'>More Info</a>";
         }
	return content;
  }  
  function toProperCase(s) {//takes a string and capitalizes first letter of every word.
     return s.replace(/\w\S*/g, function(txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); });
 } 
function buildLayerList(layer) {
    var infos = layer.layerInfos, info;
    var items = [];
    for (var i = 0, il = infos.length; i < il; i++) {
        info = infos[i];
        if (info.defaultVisibility) {
            if (info.name == cat) {
                visible.push(info.id);
                qLayer = info.id;  //set the layer ID for the category layer - to build the query layer functionality.          
            } else if (cat == "all") {
                visible.push(info.id);
            }
        }
        if ((cat == "all") && (info.id != 5)) {
            //items[i] = "<input type='checkbox' class='list_item' checked='" + (info.defaultVisibility ? "checked" : "") + "' id='" + info.id + "' onclick='updateLayerVisibility();' /><label for='" + info.id + "'></label><img alt='" + info.name + "' src='images/" + info.name + ".gif' style='height:26px; width: 26px;' />"; //" + info.name + "
            items[i] = "<input type='checkbox' class='list_item' checked='" + (info.defaultVisibility ? "checked" : "") + "' id='" + info.id + "' onclick='updateLayerVisibility();' /><label for='" + info.id + "'>" + toProperCase(info.name) + "</label>";
        }
    }
    if (cat == "all") {
        items.reverse();
        var str = items.toString();
        var str2 = str.replace(/,/g, " ");
        dojo.byId("layer_list").innerHTML = "<strong>Visible Categories:</strong> " + str2;
    }
    layer.setVisibleLayers(visible);
    map.addLayer(layer);
}  
  function updateLayerVisibility() {
    var inputs = dojo.query(".list_item"), input;
    visible = [];
    for (var i=0, il=inputs.length; i<il; i++) {
      if (inputs[i].checked) {visible.push(inputs[i].id);}
    }
    layer.setVisibleLayers(visible);
    identifyParams.layerIds = visible;  //lane added for creating the list of layer ids for identify purposes
  }
  function resizeMap() {//used for resizing of map
    var timer;
    clearTimeout(timer);
    timer = setTimeout(function() { map.resize(); map.reposition; }, 500);
    map.reposition();
  }
  dojo.addOnLoad(init);
