// Java Scripts by Data Directions, for ESRI Maps Processing....
// Last Modified: 10/27/09

       dojo.require("esri.map");
      dojo.require("esri.tasks.locator");
      dojo.require("dijit.form.Button");

     //  Need to:
     //     -  Add How Springs as Option Track loaded in Cookie.

      var map, locator, aPoint;
      var streetMap, imageryPrime, shadedRelief, ngsTopoUS, boundariesWorld;
      var MapType;

      function init() {
        // alert(readCookie('Lat')); = null
        //map = new esri.Map("map", { extent: new esri.geometry.Extent(-125, 28, -62, 45, new esri.SpatialReference({wkid:4326})) });
        map = new esri.Map("map", { extent: new esri.geometry.Extent(-130, 28, -67, 45, new esri.SpatialReference({wkid:4326})) });

        streetMap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer", "streetMap");

        map.addLayer(streetMap);
        
        //aPoint = new esri.geometry.Point(-122.25, 45.0, new esri.SpatialReference({ wkid: 4326 }));
        //map.centerAt(aPoint);
        //map.centerAndZoom(aPoint,0.1);
        
        imageryPrime = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_Imagery_World_2D/MapServer", {id:"imageryPrime"});
        shadedRelief = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_ShadedRelief_World_2D/MapServer", "shadedRelief");
        ngsTopoUS = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer", "ngsTopoUS");

        var testType = parseInt(readCookie('Type'));
        MapType = testType;
        switch (testType)
        {
            case 1: firstMap([streetMap]); break;
            case 2: firstMap([imageryPrime]); break;
            case 3: firstMap([ngsTopoUS]); break;
            case 4: firstMap([shadedRelief]);  break;
            default: firstMap([streetMap]);
         } 

        // Set event handlers...
        dojo.connect(map,"onZoomEnd", Zoomed);
        dojo.connect(map,"onPanEnd", MapPan);
         
        locator = new esri.tasks.Locator("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Locators/ESRI_Geocode_USA/GeocodeServer");
        dojo.connect(locator, "onAddressToLocationsComplete", showResults);
        SetCenterZoom()
      }
      
      
      //ZOOM Changed..
      function Zoomed(extent, zoomFactor, anchor, level) 
      {
        //alert("ZOOMED>...." + MapType);
        createMapCookies(map.extent.getCenter().y, map.extent.getCenter().x, map.getLevel(), MapType); 
      }

      //MapPanned..
      function MapPan(extent, endPoint) 
      {
        //alert("RELOAD>...." + MapType);
        createMapCookies(map.extent.getCenter().y, map.extent.getCenter().x, map.getLevel(), MapType); 
      }

      
     function SetCenterZoom(){
        //aPoint = new esri.geometry.Point(-122.25, 45.0, new esri.SpatialReference({ wkid: 4326 }));
        aPoint = new esri.geometry.Point(readCookie('Lon'), readCookie('Lat'), new esri.SpatialReference({ wkid: 4326 }));

        map.centerAt(aPoint);
        //map.centerAndZoom(aPoint,0.1);
        //map.setLevel(8);
        //setTimeout( function() { map.setLevel(9); }, 250);
        //alert(readCookie('Zoom'));
        setTimeout( function() { map.setLevel(parseInt(readCookie('Zoom'))); }, 250);

     }
      
     function locate() {
        map.graphics.clear();
        var add = dojo.byId("address").value.split(",");
        var address = {
          Address : add[0],
          City: add[1],
          State: add[2],
          Zip: add[3]
        };
        
        //alert("OK");
        // If no State and No ZIP defined Focus on Lat Lon...
        if ((add[2] == undefined) & (add[3] == undefined)){
            nPoint = new esri.geometry.Point(add[1], add[0], new esri.SpatialReference({ wkid: 4326 }));
            map.centerAt(nPoint);  
            
            var symbol = new esri.symbol.SimpleMarkerSymbol();
            symbol.setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_DIAMOND);
            symbol.setColor(new dojo.Color([0,255,0,0.75]));
            var graphic = new esri.Graphic(nPoint, symbol);
            map.graphics.add(graphic);
            
            map.graphics.add(new esri.Graphic(nPoint, new esri.symbol.TextSymbol(add[0] + ", " + add[1]).setOffset(0, 8)));
            points.addPoint(nPoint);

        }
        else
            locator.addressToLocations(address,["Loc_name"]);
      }
      
      function showResults(candidates) {
        var candidate;
        var symbol = new esri.symbol.SimpleMarkerSymbol();
        var infoTemplate = new esri.InfoTemplate("Location", "Address: ${address}<br />Score: ${score}<br />Source locator: ${locatorName}");

        symbol.setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_DIAMOND);
        symbol.setColor(new dojo.Color([255,0,0,0.75]));

        var points =  new esri.geometry.Multipoint(map.spatialReference);

        for (var i=0, il=candidates.length; i<il; i++) {
          candidate = candidates[i];
          if (candidate.score > 70) {
            var attributes = { address: candidate.address, score:candidate.score, locatorName:candidate.attributes.Loc_name };
            var graphic = new esri.Graphic(candidate.location, symbol, attributes, infoTemplate);
            map.graphics.add(graphic);
            map.graphics.add(new esri.Graphic(candidate.location, new esri.symbol.TextSymbol(attributes.address).setOffset(0, 8)));
            points.addPoint(candidate.location);
          }
        }
        
        map.setExtent(points.getExtent().expand(3));
      }

      function initLayer(url, id) {
        var layer = new esri.layers.ArcGISTiledMapServiceLayer(url, {id:id, visible:false});
        map.addLayer(layer);
        return layer;
      }


      function changeMap(layers,type) {
        MapType = type;
        hideImageTiledLayers(layers);
        for (var i=0; i<layers.length; i++) {
          layers[i].show();
          
 	    //createCookie('Lat',map.extent.getCenter().y,365);
	    //createCookie('Lon',map.extent.getCenter().x,365);
	    //createCookie('Zoom',map.getLevel(),365);
	    //createCookie('Type',type,365);
        //alert(map.extent.getCenter().x)
        }
        createMapCookies(map.extent.getCenter().y, map.extent.getCenter().x, map.getLevel(), type); 
      }
      
      function firstMap(layers) {
        hideImageTiledLayers(layers);
        for (var i=0; i<layers.length; i++) {
          layers[i].show();
          
        }
      }
      

      function hideImageTiledLayers(layers) {
        for (var j=0, jl=map.layerIds.length; j<jl; j++) {
          var layer = map.getLayer(map.layerIds[j]);
          if (dojo.indexOf(layers, layer) == -1) {
            layer.hide();
          }
        }
      }


      dojo.addOnLoad(init);

