﻿dojo.require("esri.map");
dojo.require("esri.tasks.identify");
dojo.require("esri.tasks.find");
dojo.require("esri.tasks.query");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.TabContainer");
dojo.require("dijit.Dialog");
dojo.require("dijit.form.Button");
dojo.require("dojox.image.Lightbox");
dojo.require("dojox.layout.FloatingPane");
dojo.require("dojo.parser");


  var layer, map, visible=[], identifyTask, identifyParams, symbol, pano;
  var layer0results, layer2results, layersLoaded, loading, resultTemplate;
  var startExtent = new esri.geometry.Extent(273300.202, 3547246.882, 726492.009, 3910225.174, new esri.SpatialReference({wkid:26917}));

  function init() {
      layersLoaded = 0;
      loading = dojo.byId("loading");
      
     esriConfig.defaults.map.zoomDuration = 750;
     esriConfig.defaults.map.zoomRate = 35;

     map = new esri.Map("map");
    
      dojo.connect(map, "onLoad", initFunctionality);
      dojo.connect(map, "onZoomStart", showLoading);
      dojo.connect(map, "onPanStart", showLoading);

    dojo.connect(map, "onMouseDown", function(evt) {
      map.reposition();
    });

             
  var imageryPrime = new esri.layers.ArcGISTiledMapServiceLayer("http://maps.sccommerce.com/ArcGIS/rest/services/DOC_BaseMap/MapServer");

  map.addLayer(imageryPrime);
  dojo.connect(imageryPrime, "onUpdate", hideLoading);
    
   layer = new esri.layers.ArcGISDynamicMapServiceLayer("http://maps.sccommerce.com/ArcGIS/rest/services/Building/MapServer");
   layer.setVisibleLayers([0]);
   layer.setOpacity(0.5);
 //layer.setImageTransparency(1);
   map.addLayer(layer);
   dojo.connect(layer, "onUpdate", hideLoading);
   
    var vars = getUrlVars();
    
    if (vars.length > 0) {
       if (vars['type'] == 'Building')
       {
            zoomToBuilding(vars['key_no']);
            var tabContainer = dijit.byId("mainSelectors");
            tabContainer.selectChild(dijit.byId('buildingSearch'));
       
       }
       if (vars['type'] == 'Site')
       {
            zoomToSite(vars['key_no']); 
            var tabContainer = dijit.byId("mainSelectors");
            tabContainer.selectChild(dijit.byId('siteSearch'));
            layer.setVisibleLayers([1]);
         
       } 
    
    }

       
   dojo.connect(map.infoWindow, "onShow", function() {
      dijit.byId("tabs").resize();
  });

  var tabContainer = dijit.byId("mainSelectors");
  dojo.connect(tabContainer, "selectChild",
  function() {
        var tabContainer = dijit.byId("mainSelectors");
        var selected = tabContainer.selectedChildWidget;
        if (selected.id == 'buildingSearch') setVisible("buildings");
        if (selected.id == 'siteSearch') setVisible("sites");
    }
  );
  
   
    
  }
  

  function initFunctionality(map) {
     dojo.connect(map, "onClick", doIdentify);
      map.disableMapNavigation();
      map.hideZoomSlider();

    identifyTask = new esri.tasks.IdentifyTask("http://maps.sccommerce.com/ArcGIS/rest/services/building/MapServer");

    identifyParams = new esri.tasks.IdentifyParameters();
    identifyParams.tolerance = 5;
    identifyParams.returnGeometry = true;
    identifyParams.layerIds = [0,1];
    identifyParams.layerOption = esri.tasks.IdentifyParameters.LAYER_OPTION_ALL;

    map.infoWindow.resize(210, 200);
    map.infoWindow.setContent(dojo.byId("tabs"));
    map.infoWindow.setTitle("Identify Results");

    symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 2), new dojo.Color([255,255,0,0.5]));
    

}

function showLoading() {
    esri.show(loading);
    map.disableMapNavigation();
    map.hideZoomSlider();
}

function hideLoading() {
    layersLoaded++;
    if (layersLoaded === map.layerIds.length) {
        esri.hide(loading);
        map.enableMapNavigation();
        map.showZoomSlider();
        layersLoaded = 0;
    }
}

function setVisible(layerName) {
    switch (layerName) {
        case "buildings":
            layer.setVisibleLayers([0]);
            map.setExtent(startExtent);
            document.getElementById("pnlResults").innerHTML = "";
            break;
        case "sites":
            layer.setVisibleLayers([1]);
            map.setExtent(startExtent);
            document.getElementById("pnlResults").innerHTML = "";
            break;

    }
    

}

  function doIdentify(evt) {
    map.graphics.clear();
    identifyParams.geometry = evt.mapPoint;
    identifyParams.mapExtent = map.extent;
    identifyTask.execute(identifyParams, function(idResults) { addToMap(idResults, evt); });
  }
  function addToMap(idResults, evt) {
    layer0results = {displayFieldName:null,features:[]};
    layer2results = {displayFieldName:null,features:[]};

    for (var i=0, il=idResults.length; i<il; i++) {
      var idResult = idResults[i];
      if (idResult.layerId === 0) {
        if (!layer0results.displayFieldName) {layer0results.displayFieldName = idResult.displayFieldName};
        layer0results.features.push(idResult.feature);
      } else if (idResult.layerId === 1) {
        if (!layer2results.displayFieldName) {layer2results.displayFieldName = idResult.displayFieldName};
        layer2results.features.push(idResult.feature);
      } 
    }
    
    //dijit.byId("tabs").setContent(layerTabContent(layer0results,"layer0results"));
   // dijit.byId("tabs").setContent(layerTabContent(layer2results,"layer2results"));
    
    var combinedContent = layerTabContent(layer0results, "layer0results") + layerTabContent(layer2results, "layer2results");
    dijit.byId("tabs").setContent(combinedContent);
    
    map.infoWindow.show(evt.screenPoint, map.getInfoWindowAnchor(evt.screenPoint));
  }

  function layerTabContent(layerResults, layerName) {
    var content = "";
    switch (layerName) {
        case "layer0results":
            if (layerResults.features.length > 0) {
                content = "<i>Buildings: " + layerResults.features.length + "</i>";
                content += "<table border='1'><tr><th>Property</th><th></th></tr>";
                for (var i = 0, il = layerResults.features.length; i < il; i++) {
                    content += "<tr><td>" + layerResults.features[i].attributes['PROPERTY'] + "</td>";
                    content += "<td><a href='http://maps.sccommerce.com/bldgSearch/report.aspx?KEY_NO=" + layerResults.features[i].attributes['KEY_NO'] + "' target='_blank'>(flyer)</a></td>";
                }
                content += "</tr></table>";
            }
            break;
        case "layer2results":
            if (layerResults.features.length > 0) {
                content = "<i>Sites: " + layerResults.features.length + "</i>";
                content += "<table border='1'><tr><th>Property</th><th></th></tr>";
                for (var i = 0, il = layerResults.features.length; i < il; i++) {
                    content += "<tr><td><a href='javascript:showFeature(" + layerName + ".features[" + i + "]);'>" + layerResults.features[i].attributes['PROPERTY'] + "</a></td>";
                    content += "<td><a href='http://maps.sccommerce.com/siteSearch/report.aspx?KEY_NO=" + layerResults.features[i].attributes['KEY_NO'] + "' target='_blank'>(flyer)</a></td>";
                }
                content += "</tr></table>";
            }
            break;
      
    }
    return content;
  }

  function showFeature(feature) {
    map.graphics.clear();
    feature.setSymbol(symbol);
    map.graphics.add(feature);
  }
  
  function zoomToSite(key_no) {
      var findParams = new esri.tasks.FindParameters();
      findParams.returnGeometry = true;
      findParams.layerIds = [1];
      findParams.searchFields = ["KEY_NO"];
      findParams.searchText = key_no;
      
      findTask = new esri.tasks.FindTask("http://maps.sccommerce.com/ArcGIS/rest/services/building/MapServer");

      findTask.execute(findParams,showResults);

      window.scrollTo(0, 0);
  
  }
  
  function zoomToBuilding(key_no) {
      var findParams = new esri.tasks.FindParameters();
      findParams.returnGeometry = true;
      findParams.layerIds = [0];
      findParams.searchFields = ["KEY_NO"];
      findParams.searchText = key_no;
      
      findTask = new esri.tasks.FindTask("http://maps.sccommerce.com/ArcGIS/rest/services/building/MapServer");

      findTask.execute(findParams,showResults);

      
      window.scrollTo(0,0);
  
  }
  
  function showResults(results) {
    //find results return an array of findResult.
    map.graphics.clear();

    for (var i=0, il=results.length; i<il; i++) {
      var curFeature = results[i];
      var graphic = curFeature.feature;
      var layerName = curFeature.layerName;
      var layerId = curFeature.layerId;
      var foundFieldName = curFeature.foundFieldName;
      var foundFieldValue = graphic.attributes[foundFieldName];
      var extent = new esri.geometry.Extent(0,0,0,0,26917);
      var attValues = [layerName,layerId,foundFieldName,foundFieldValue];

      switch (graphic.geometry.type) {
        case "point":
          var symbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_SQUARE, 10, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 1), new dojo.Color([0,255,0,0.25]));
          var text = new esri.symbol.TextSymbol("", "Arial", new dojo.Color([255,0,0]));
          var pointPosX = graphic.geometry.x;
          var pointPosY = graphic.geometry.y;
          // wkid 26917 - UTM17N
          extent.xmax = pointPosX + 1050;
          extent.xmin = pointPosX - 1050;
          extent.ymax = pointPosY + 1050;
          extent.ymin = pointPosY - 1050;
         // extent
          
          break;
        case "polyline":
          var symbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASH, new dojo.Color([255,0,0]), 1);
          break;
        case "polygon":
          var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_NONE, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASHDOT, new dojo.Color([255,0,0]), 2), new dojo.Color([255,255,0,0.25]));
          extent = graphic.geometry.getExtent()
          extent = extent.expand(1.5);
          break;
      }
      graphic.setSymbol(symbol);
      if (graphic.geometry.type=="point")
      {
        graphic.setSymbol(text);
      }
      map.graphics.add(graphic);
      map.setExtent(extent);
    }
   }
   
  function buildMarkers(csvKey_No) {
    var queryTask = new esri.tasks.QueryTask("http://maps.sccommerce.com/ArcGIS/rest/services/building/MapServer/0");
    var query = new esri.tasks.Query();
    var whereString = "";
    var arrKey_no = csvKey_No.split(",");
    for(i = 0; i < arrKey_no.length; i++){
          if (i == 0) {
            whereString += "KEY_NO = '" + arrKey_no[i] + "' ";
          }
          else {
            whereString += "OR KEY_NO = '" + arrKey_no[i] + "' "; 
          }
    }

    query.where = whereString;
    query.returnGeometry = true;
    query.outFields = ["KEY_NO"];
    queryTask.execute(query, addPointsToMap);   
  
  } 
  
  function addPointsToMap(featureSet) {
    //var defaultSymbol = new esri.symbol.SimpleMarkerSymbol().setColor(new dojo.Color([0,0,255]));
    var defaultSymbol = new esri.symbol.PictureMarkerSymbol("http://maps.sccommerce.com/geoservices/img/blueArrow.png", 15, 15);
    var features = featureSet.features;
    var resultTemplate = new esri.InfoTemplate("FRANK","FRANK'S CONTENTS");

    
    var markerLayer = new esri.layers.GraphicsLayer();
    map.addLayer(markerLayer);
    map.reorderLayer(markerLayer,1);
    
    var maxX, minX, maxY, minY;

    
    for (var i=0, il=features.length; i<il; i++) {
     // markerLayer.add(features[i].setSymbol(defaultSymbol).setInfoTemplate(resultTemplate));
       map.graphics.add(features[i].setSymbol(defaultSymbol).setInfoTemplate(resultTemplate));
      if (i==0) {
          maxX = features[i].geometry.x;
          minX = features[i].geometry.x;
          maxY = features[i].geometry.y;
          minY = features[i].geometry.y;
      }
      else {
          if (maxX <= features[i].geometry.x) {
            maxX = features[i].geometry.x;
          }
          if (minX >= features[i].geometry.x) {
            minX = features[i].geometry.x;
          }
          if (maxY <= features[i].geometry.y) {
            maxY = features[i].geometry.y;
          }
          if (minY >= features[i].geometry.y) {
            minY = features[i].geometry.y;
          }
      }
       
      
    }
    var extent = new esri.geometry.Extent(minX, minY, maxX, maxY, 26917);
     map.setExtent(extent);
    
  }
  
  function firePano(lat, lng) {
    var coords = new GLatLng(lng, lat);
    panoramaOptions = { latlng:coords };
    pano = new GStreetviewPanorama(document.getElementById("pano"), panoramaOptions);
    GEvent.addListener(pano, "error", handlePanoErrors);
    document.getElementById("panoContainer").style.visibility = 'visible';
    
    
    }
  
  function handlePanoErrors(errorCode) {
      if (errorCode == "603") {
        alert("Error: Flash doesn't appear to be supported by your browser");
        return;
      }
      if (errorCode == "600") {
        alert("Error: no streetview");
        return;
      }


  
  }
  
  function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }

    return vars;
}


   
   