﻿dojo.require("esri.map");
dojo.require("esri.tasks.query");
dojo.require("esri.tasks.find");
dojo.require("esri.tasks.geometry");

var map, startExtent;
var queryTask, query;
var gsvc = null;
var pt = null;

function init() {
    var layersLoaded = 0;  //varible to keep track of when all layers have been loaded.
    var loading = dojo.byId("mapLoadingImg");  //loading image. id

    map = new esri.Map("map", { nav: true });
    dojo.connect(map, "onLoad", showLoading);
    dojo.connect(map, "onZoomStart", showLoading);
    dojo.connect(map, "onPanStart", showLoading);
    //dojo.connect(map, "onExtentChange", showExtent);
    dojo.connect(map, "onExtentChange", setScaleBar);
    var streetMapLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://ags.wingis.org/ArcGIS/rest/services/ParcelBasic/MapServer");
    map.addLayer(streetMapLayer);
    dojo.connect(streetMapLayer, "onLoad", hideLoading);
    dojo.connect(streetMapLayer, "onUpdate", hideLoading);

    //build query
    queryTask = new esri.tasks.QueryTask("http://ags.wingis.org/ArcGIS/rest/services/ParcelBasic/MapServer/1");

    //build query filter
    query = new esri.tasks.Query();
    query.returnGeometry = true;
    query.outFields = [""];

    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;
        }
    }
    
    gsvc = new esri.tasks.GeometryService("http://ags.wingis.org/arcgis/rest/services/Geometry/GeometryServer");
    dojo.connect(map, "onClick", projectToLatLong);

}
// ==============================================================================
function setScaleBar() {
    var scale = ((map.extent.xmax - map.extent.xmin) / map.width) * 96;
    var divScaleMiles = document.getElementById("divScaleMiles");
    var miles, feet, measurment;
    measurment = scale;
    if (measurment < 1000) {
        miles = scale;
        divScaleMiles.innerHTML = miles.toFixed(2) + " feet";
    }
    else {
        miles = scale / 5280;
        divScaleMiles.innerHTML = miles.toFixed(2) + " miles";
    }
    if (measurment > 52800) {
        divScaleMiles.innerHTML = "";
    }
}
function showExtent(extent) {
    var link = "";
    var theExt = "";
    var PIN = '0000000000'
    s = "XMin: " + extent.xmin + "&nbsp;"
                + "YMin: " + extent.ymin + "&nbsp;"
                + "XMax: " + extent.xmax + "&nbsp;"
                + "YMax: " + extent.ymax;
    theExt = "?pin=" + PIN + "&xmax=" + extent.xmax + "&ymax=" + extent.ymax + "&xmin=" + extent.xmin + "&ymin=" + extent.ymin;
    link = "<a href=javascript:PrintWindow('http://ims.wingis.org/PrintPage_CurrentView.aspx" + theExt + "');>Print Current Map View</a>";
    dojo.byId("info").innerHTML = link;
}
// ==============================================================================

function zoomToParcelQuery(searchString) {
    query.where = "OBJECTID = '" + searchString + "'";
    queryTask.execute(query, showFindResults);
}

function zoomToPOIQuery(xPoint, yPoint) {
    var xMax = xPoint + 100;
    var yMax = yPoint + 100;
    var xMin = xPoint - 100;
    var yMin = yPoint - 100;

    var point = new esri.geometry.Point(xPoint, yPoint, map.spatialReference);
    var symbol = new esri.symbol.SimpleMarkerSymbol().setColor(new dojo.Color([0, 0, 255]));
    var graphic = new esri.Graphic(point, symbol);

    var newExtent = new esri.geometry.Extent();
    newExtent.xmin = xMin;
    newExtent.ymin = yMin;
    newExtent.xmax = xMax;
    newExtent.ymax = yMax;
    newExtent.spatialReference = new esri.SpatialReference({ wkid: 3436 });
    map.setExtent(newExtent);
    map.graphics.add(graphic)
}

function showFindResults(results) {
    map.graphics.clear();
    var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_NULL, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 0, 0]), 3), new dojo.Color([0, 0, 0, 0]));
    for (var i = 0, il = results.features.length; i < il; i++) {
        var featureAttributes = results.features[i].attributes;
        var graphic = results.features[i];
        graphic.setSymbol(symbol);
        map.graphics.add(graphic);
        var selectedTaxLot = results.features[i].geometry.getExtent();
    }
    var taxLotExtent = selectedTaxLot;
    zoomToParcel(taxLotExtent);
}

function zoomToParcel(extent) {
    map.setExtent(extent);
}

// ==============================================================================

function projectToLatLong(evt) {
//    map.graphics.clear();
    var point = evt.mapPoint;
    var symbol = new esri.symbol.SimpleMarkerSymbol().setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_DIAMOND);
    var graphic = new esri.Graphic(point, symbol);
    var outSR = new esri.SpatialReference({ wkid: 4326 });
//    map.graphics.add(graphic);

    gsvc.project([graphic], outSR, function(features) {
        pt = features[0].geometry;
        var gpsdegy = parseInt(pt.y);
        var remainder = pt.y - (gpsdegy * 1.0);
        var gpsminy = remainder * 60.0;
        var gpsx = pt.x * -1;
        var gpsdegx = parseInt(gpsx);
        var remainder = gpsx - (gpsdegx * 1.0);
        var gpsminx = remainder * 60.0;

        dojo.byId("latlong").innerHTML = "&nbsp;Latitude = " + pt.y.toFixed(6) + "&nbsp;&nbsp;Longitude = " + pt.x.toFixed(6) + "&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;GPS Lat = N " + gpsdegy + "&deg" + gpsminy.toFixed(4) + "'&nbsp;&nbsp;GPS Lon = W 0" + gpsdegx + "&deg" + gpsminx.toFixed(4) + "'"
        + "&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;<a target=new href=http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=" + pt.y.toFixed(6) + "," + pt.x.toFixed(6) + "&mrt=all&sll=" + pt.y.toFixed(6) + "," + pt.x.toFixed(6) + "&sspn=0.040887,0.084457&ie=UTF8&t=h&z=16>Driving Directions</a>";
    });

}

dojo.addOnLoad(init);