dojo.require("esri.map");
dojo.require("esri.tasks.query");
dojo.require("esri.tasks.find");
dojo.require("esri.tasks.geometry");

var map, startExtent;
var queryTask, querySearch;

function init() {
    hideLoading_Search();
    var layersLoaded = 0;
    var loading = dojo.byId("mapLoadingImg");
    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", setScaleBar);
    var streetMapLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://ags.wingis.org/ArcGIS/rest/services/BooneCnty/MapServer");
    map.addLayer(streetMapLayer);
    dojo.connect(streetMapLayer, "onUpdate", hideLoading);

    //build query
    queryTask = new esri.tasks.QueryTask("http://ags.wingis.org/ArcGIS/rest/services/BooneCnty/MapServer/1");

    //build query filter
    querySearch = new esri.tasks.Query();
    querySearch.returnGeometry = true;
    querySearch.outFields = ["*"];

    gsvc = new esri.tasks.GeometryService("http://ags.wingis.org/arcgis/rest/services/Geometry/GeometryServer");
    dojo.connect(map, "onClick", projectToLatLong);


}
// ==============================================================================

function showLoading() {
    document.getElementById('loading').style.visibility = 'visible';
}

function hideLoading() {
    document.getElementById('loading').style.visibility = 'hidden';
}

function showLoading_Search() {
    document.getElementById('SearchingImg').style.visibility = 'visible';
}

function hideLoading_Search() {
    document.getElementById('SearchingImg').style.visibility = 'hidden';
}

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 DoQuery(searchstring) {
    showLoading_Search();
    var searchstring = searchstring.toUpperCase();
    querySearch.where = "pin like '%" + searchstring.replace(/-/g, "") + "%' OR add_full like '%" + searchstring.replace(/ /g, "%") + "%'";
    queryTask.execute(querySearch, showResults);
}

function showResults(results) {
    hideLoading_Search();
    var content = "";
    content += "<table border='0' cellspacing='0' cellpadding='1' width='95%'>";
    for (var i = 0, il = results.features.length; i < il; i++) {
        content += "<tr><td colspan='2'><b>Pin:</b> " + results.features[i].attributes['pin'] + "</td></tr>";
        content += "<tr><td colspan='2'><b>Address</b><br>" + results.features[i].attributes['add_full'] + "</td></tr>";
        content += "<tr><td colspan='2'>" + results.features[i].attributes['add_munic'] + ", " + results.features[i].attributes['add_zip'] + "</td></tr>";
        content += "<tr><td><a href='javascript:zoomToParcelQuery(" + results.features[i].attributes['OBJECTID'] + ")'>Zoom Map</a></td>";
        content += "<td><a href='javascript:NewWindow_PM(" + results.features[i].attributes['OBJECTID'] + ")'>Parcel Details / Print Page</a></td></tr>";
        content += "<tr><td colspan='2'><hr size='1' /></td></tr>";
    }
    content += "</tr></table>";
    dojo.byId("SearchResultsDisplay").innerHTML = content;
}


function zoomToParcelQuery(Oid) {
    querySearch.where = "OBJECTID = " + Oid + "";
    queryTask.execute(querySearch, showFindResults);
}

function showFindResults(zoomResults) {
    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 = zoomResults.features.length; i < il; i++) {
        var featureAttributes = zoomResults.features[i].attributes;
        var graphic = zoomResults.features[i];
        graphic.setSymbol(symbol);
        map.graphics.add(graphic);
        var selectedTaxLot = zoomResults.features[i].geometry.getExtent();
    }
    var taxLotExtent = selectedTaxLot;
    zoomToParcel(taxLotExtent);
}

function zoomToParcel(extent) {
    map.setExtent(extent);
}

function projectToLatLong(evt) {
    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 });

    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 = "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) + "'"
        + "<br /><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>";
    });

}

function HideContent(d) {
    document.getElementById(d).style.display = "none";
}
function ShowContent(d) {
    document.getElementById(d).style.display = "block";
}

function NewWindow_PM(ObID) {
    window.open('PrintPage.aspx?ObjectId=' + ObID, 'EditWindow', 'width=700, height=750, scrollbars=yes, resizable=no');
}
// ==============================================================================
dojo.addOnLoad(init);