﻿var map, maptools, maptools2, mapDrawbar, ddlDraw, ddlDraw2, geomTask;
var mapLayerESRI_streets, mapLayerNew, mapLayerInstallation, areaExtent, defaultExtent, defaultExtent2, installationLayerLoaded;
var identifyOn, idBusyGraphic, idHandle, loading, currIdResults, svHandle, sqHandle, labelHandle, graphicInfoWindowHandle;
var gSvc, pt;
var installationServiceLoaded = false;
var clientMapService, geomService;
var streetMap, streetmapbing, imageryPrime, imagerybing, shadedRelief, ngsTopoUS, boundariesWorld;
var findTask, findParams, searchlayerIds, searchtext, queryTask;
var grid, findresultsgrid, store;
var graphic, geomservice;
var resultField, resultFields, featureSet;
var pdfMessage, pdfLink, printBusyImg, printClient, PdfLinkMessage1, PdfLinkMessage2;
var textToolEnabled = false;
var identifyGraphics = [];
var drawtoolbar, toolObjects = [];
var showEsriLogo = true;  // show ESRI logo (set in some apps)

dojo.require("esri.map");
dojo.require("esri.layers.wms");
dojo.require("esri.toolbars.navigation");
dojo.require("esri.toolbars.draw");
dojo.require("esri.tasks.identify");
dojo.require("esri.tasks.query");
dojo.require("esri.tasks.find");
dojo.require("esri.tasks.geometry");
dojo.require("esri.virtualearth.VETiledLayer");
dojo.require("dijit.dijit");
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.Dialog");
dojo.require("dijit.TitlePane");
dojo.require("dijit.Toolbar");
//dojo.require("dojox.grid.DataGrid");
//dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.form.Button");
dojo.require("esri.toolbars.draw");
dojo.require("dojo.number");
dojo.require("esri.dijit.Scalebar");

function init() {
    
    var bingkey = 'AikdOt4YU9OZ4ny8ZsKLqn5dnSG2LDHATTqYWUY_Ev_7h9r0PPe5p17zDIh7o7rD';
    esri.config.defaults.map.logoLink = "http://www.tierraplan.com";

    //esri.config.defaults.io.proxyUrl = "proxy.ashx";
    //esri.config.defaults.io.alwaysUseProxy = true;
    defaultExtent = new esri.geometry.Extent({ "spatialReference": { "wkid": 102100} });
    defaultExtent.xmin = parseFloat(xmin);
    defaultExtent.ymin = parseFloat(ymin);
    defaultExtent.xmax = parseFloat(xmax);
    defaultExtent.ymax = parseFloat(ymax);

    map = new esri.Map("map", { extent: defaultExtent, logo: showEsriLogo });
    // hook up toolbar, wire up to the map div
    maptools = new esri.toolbars.Navigation(map);
    dojo.connect(maptools, "onExtentHistoryChange", extentHistoryChangeHandler);

    //color the zoom box
    var sfgcolor = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID,
        new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASHDOTDOT,
        new dojo.Color([239, 24, 24]), 3), new dojo.Color([255, 198, 0, 0.45]));
    maptools.setZoomSymbol(sfgcolor);

    imageryPrime = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer", "imageryPrime");
    streetMap = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer", "streetMap");

    if (usebingmap == "Yes") {
        streetmapbing = new esri.virtualearth.VETiledLayer({
            bingMapsKey: bingkey,
            mapStyle: esri.virtualearth.VETiledLayer.MAP_STYLE_ROAD
        });
        map.addLayer(streetmapbing);
        imagerybing = new esri.virtualearth.VETiledLayer({
            bingMapsKey: bingkey,
            mapStyle: esri.virtualearth.VETiledLayer.MAP_STYLE_IMAGERY
        });
        map.addLayer(imagerybing);
    }
//    if (usegmap == "Yes") {
//        gMap = new gmaps.GoogleMapsLayer({
//            visible: false,
//            id: 'googlemaps'
//        });
//        map.addLayer(gMap);
//    }
    hillshade = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Shaded_Relief/MapServer", "shadedRelief");
    //ngsTopoUS = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer", "ngsTopoUS");
    ngsTopoUS = initLayer("http://server.arcgisonline.com/ArcGIS/rest/services/USA_Topo_Maps/MapServer", "ngsTopoUS");

    //setCheckedValue(document.aspnetForm.rbBasemap, defaultmap); // setCheckedValue now 'clicks' the map type radio button
//    if (pid == 1 || pid == 2) {
//        changeMap([gMap]);
//        gMap.setMapTypeId('terrain');
//        //setCheckedValue(document.aspnetForm.rbBasemap, "googleterrain")
//    }
//    else if (pid == 5) {
//        changeMap([gMap]);
//        gMap.setMapTypeId('hybrid');
//        //setCheckedValue(document.aspnetForm.rbBasemap, "googlehybrid")
//    }
//    else {
//        changeMap([streetMap]);
//        //setCheckedValue(document.aspnetForm.rbBasemap, "[streetMap]")
//    }

    dojo.connect(map, "onLoad", function () {
        if (usegmap == "Yes") {
            gMap = new gmaps.GoogleMapsLayer({
                visible: false,
                id: 'googlemaps'
            });
            map.addLayer(gMap, 0); // insert layer at top to keep client service as last layer
        }

        setCheckedValue(document.aspnetForm.rbBasemap, defaultmap); // sets the map type radio button and sets base layer
        
        map.setMapCursor('pointer');
    });

    // client map service
    clientMapService = new esri.layers.ArcGISDynamicMapServiceLayer(REST_Server + mapservice + "/MapServer?token=" + token, { "opacity": layeropacity });
    
    geomService = new esri.tasks.GeometryService("http://208.184.113.221/ArcGIS/rest/services/Geometry/GeometryServer");
    map.addLayer(clientMapService);

    //Scalebar
    dojo.connect(map, 'onLoad', function () {
        var scalebar = new esri.dijit.Scalebar({ map: map, scalebarUnit: units }, dojo.byId("scalebardiv"));
    });

    var resizeTimer;
    dojo.connect(map, 'onLoad', function(theMap) {
        dojo.connect(dijit.byId('map'), 'resize', function() {  //resize the map if the div is resized
            clearTimeout(resizeTimer);
            resizeTimer = setTimeout(function() {
                map.resize();
                map.reposition();
            }, 500);
        });
    });

    // hook up listener for showing mouse coordinates
    dojo.byId("maplocation").innerHTML = "Lat: &bull; Long:";
    dojo.connect(map, "onLoad", function () {
        dojo.connect(map, "onMouseMove", showCoordinates);
        dojo.connect(map, "onMouseDrag", showCoordinates);
    });
    // set polygon symbols for search and identify functions
    symbolpoly = 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.8]));
    symbolpt = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE, 10,
        new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID,
        new dojo.Color([255, 0, 0]), 2), new dojo.Color([255, 255, 0, 0.8]));
    symbolline = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 0, 0]), 2);
    //set symbols for sketch
    sketchsymbolpt = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE, 9, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([232, 126, 33]), 2), new dojo.Color([232, 126, 33, 0.5]));
    sketchsymbolline = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([232, 126, 33]), 2);
    sketchsymbolpolyline = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([232, 126, 33]), 2);
    //var color = new dojo.Color("#ff0000");
    //var color = rgba(255, 0, 0, 1);
    sketchsymbolpoly = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_NULL, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([232, 126, 33]), 2), new dojo.Color("blue"));
    symbolextent = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([232, 126, 33]), 1), new dojo.Color([239, 239, 205, 0.4]));

    //set up identify and find functions
    dojo.connect(map, "onLoad", enableIdentify);
    dojo.connect(map.infoWindow, "onHide", deactivateIdentify);
    //setup search by polygon tool
    maptools2 = new esri.toolbars.Draw(map);
    // setup draw toolbar //TODO make this configurable
    if (drawtools == 'Yes') {
        drawtoolbar = new esri.toolbars.Draw(map);
        dojo.connect(drawtoolbar, "onDrawEnd", drawToMap);
    }
    // setup the print service client
    PdfLinkMessage1 = dojo.byId("PdfLinkMessage1");
    PdfLinkMessage2 = dojo.byId("PdfLinkMessage2");
    pdfMessage = dojo.byId("PdfMessage");
    pdfLink = dojo.byId("PdfLink");
    printBusyImg = dojo.byId("PrintProcessingImage");
    var printServiceUrl = "/MapPrintingService/MapPrintingService.svc/json/Print";
    printClient = new PrintUtility(map, printServiceUrl);
    dojo.connect(clientMapService, "onUpdateEnd", hideLayerLoading);
    updateLayerVisibility();  // Don't need this with TOC but keep for backward compatibility with layer list

    map.setExtent(defaultExtent)

}  // END INIT()
dojo.addOnLoad(init);

