
function showCoordinates(evt) {
    var projPt = esri.geometry.webMercatorToGeographic(evt.mapPoint);
    dojo.byId("maplocation").innerHTML = "Lat: " + projPt.y.toFixed(5) + "&bull; Long:" + projPt.x.toFixed(5);
}

///////////////////// BASEMAP CHOOSER HANDLERS
function basemap(type, visible) {
    if (visible == true) {
        for (var i = 0; i < type.length; i++) {
            dojo.byId("map_layers").style.cursor = 'crosshair';
            type[i].show();
        }
    } else
    { hideBaseMap(type) }
}

function initLayer(url, id) {
    var layer = new esri.layers.ArcGISTiledMapServiceLayer(url, { id: id, visible: false });
    map.addLayer(layer);
    return layer;
}

function changeMap(layers) {
    hideBaseMap(layers);

    if (layers != 'none') {
        for (var i = 0; i < layers.length; i++) {
            layers[i].show();
        }
    }
}
function hideBaseMap(layers) {
    for (var j = 0, jl = map.layerIds.length - 1; j < jl; j++) {
        // Hides all the base map layers only. length -1 because I want to leave the client map service visible.  It gets added as the last layer in the layers array.
        // Also dont hide clientImagery layer if it exists
        var layer = map.getLayer(map.layerIds[j]);
        if (dojo.indexOf(layers, layer) == -1 && layer.id != "clientImagery") {
            layer.hide();
        }
    }
}

function addImagelayer(imgLayer,imgService) {
    //alert(imgLayer);
    showLayerLoading();
    changeMap('none');
    //setCheckedValue(document.aspnetForm.rbBasemap, "none")
    // var clientImageService = new esri.layers.ArcGISDynamicMapServiceLayer(REST_Server + "UMTRA_PublicRaster/MapServer?token=" + token, { "opacity": 1.0 });
    var clientImageService = new esri.layers.ArcGISDynamicMapServiceLayer(REST_Server + imgService + "/MapServer?token=" + token, { "opacity": 1.0 });
    dojo.connect(clientImageService, "onUpdateEnd", hideLayerLoading);
    map.addLayer(clientImageService,0);
    visible = [];
    visible.push(imgLayer);
    clientImageService.setVisibleLayers(visible);
}

/////////////////////// TOOL BAR HANDLERS
function setNavTool(navType) {
    deactivateTools();
    maptools.activate(navType);
    if (navType == "pan") {
        //map.setMapCursor("pointer");
        dojo.byId("map_layers").style.cursor = 'pointer';
    }    
}

function setNavIcon(id) {
    $('.toolbtnOn').removeClass('toolbtnOn');
    $('#' + id).parent().parent().addClass('toolbtnOn');
}
function deactivateStreetView() {
    dojo.disconnect(svHandle);
    svHandle = null;
}
function deactivateSearchbyPoly() {
    dojo.disconnect(sqHandle);
    sqHandle = null;
}
function deactivateIdentify() {
    dojo.disconnect(idHandle);
    idHandle = null;
    deactivateInfoWindow();
    dojo.byId("map_layers").style.cursor = 'default';
}
function deactivateTextLabel() {
    dojo.disconnect(labelHandle);
    labelHandle = null;
}
function deactivateInfoWindow() {
    dojo.disconnect(graphicInfoWindowHandle);
    graphicInfoWindowHandle = null;
}

function deactivateSketch() {
    if (drawtools == 'Yes') {
        if (drawtoolbar)
            drawtoolbar.deactivate();
        dojo.byId("ddlSketch").options[0].selected = true;
        $("#measuredialog").dialog('close');
    }
}

function deactivateTools() {
    for (var i = 0; i < toolObjects.length; i++) {
        toolObjects[i].deactivate();
    }
    deactivateSketch();
    deactivateTextLabel();
    maptools.deactivate();
    maptools2.deactivate();
    deactivateStreetView();
    dojo.byId("map_layers").style.cursor = 'default';
    esri.bundle.toolbars.draw.addPoint = "Click to add a point";
}
    
function showError(err) {
    var msg = (err.message != "") ? err.message : err.details[0];
    alert(msg);
}
/////////////////////////  EXTENT HANDLERS
function resetMap() {
    deactivateTools();
    changeExtent(defaultExtent.xmin, defaultExtent.ymin, defaultExtent.xmax, defaultExtent.ymax, 0);
}

function changeExtent(minx, miny, maxx, maxy, leveladjust) {
    //var newextent = new esri.geometry.Extent(minx, miny, maxx, maxy, new esri.SpatialReference({ wkid: wkid }));
    //map.setExtent(newextent, true);
    // resetting the map extent with setExtent does not work with an dynamic servce on top of a tiled service.
    // center and zoom to a point works only if the extent is changed before the map layer is loaded and added:
    // Get the center of the input extent:
    if (minx == 0)
    { map.setExtent(defaultExtent); }
    else {
        var cX = (parseFloat(minx) + parseFloat(maxx)) / 2;
        var cY = (parseFloat(miny) + parseFloat(maxy)) / 2;
        pnt = new esri.geometry.Point(cX, cY, new esri.SpatialReference({ wkid: wkid }));
        var newLevel = getEnclosingTileLevel(minx, miny, maxx, maxy, streetMap, map.width, map.height);
        map.centerAndZoom(pnt, newLevel - leveladjust);
    }
}

function getEnclosingTileLevel(minx, miny, maxx, maxy, tiledMapLayer, mapWidth, mapHeight) {
    //Calculates the best zoom level for tiled base map.
    var lods = tiledMapLayer.tileInfo.lods;
    var resX = (maxx - minx) / mapWidth;
    var resY = (maxy - miny) / mapHeight;
    var extRes = Math.max(resX, resY);
    var level = null;
    for (var l in lods) {
        if (lods[l].resolution < extRes) {
            level = lods[l].level - 1;
            break;
        }
    }
    return level;
}

function zoomToPoint() {
    var x1 = document.getElementById('ctl00_ContentPlaceHolder1_txtLong').value;
    var y1 = document.getElementById('ctl00_ContentPlaceHolder1_txtLat').value;
    var sourceProj = new Proj4js.Proj("EPSG:4326");  
    var destProj = new Proj4js.Proj("EPSG:102100");
    var p = new Proj4js.Point(x1 + ',' + y1);

    Proj4js.transform(sourceProj, destProj, p);
    var cX = p.x;
    var cY = p.y;
  
  var pnt = new esri.geometry.Point(cX, cY, new esri.SpatialReference({ wkid: 102100 }));
  var marker = new esri.symbol.PictureMarkerSymbol('http://cdn.tierraplan.com/images/mappins/pin-blue.png', 36, 38);
  marker.yoffset = 17;
  marker.xoffset = 7;
  var attr = { "Long": cX, "Lat": cY };
  titleHTML = "<div style='margin-left: auto; margin-right: auto;height:20px;'>";
  titleHTML += "<div style='float:left;'>My Point</div> <div style='float:right;'><a href=# onclick='javascript:map.infoWindow.hide();'>close</a></div><div style='clear: both;'></div></div>";
  contentHTML = "<a href='#' onclick='showStreetView(" + y1.toString() + ',' + x1.toString() + ");return false;'>Google Street View</a>";
  contentHTML += "<BR><a href='#' onclick='return false;'>Add to My Places</a>"
  contentHTML += "<BR><a href='#' onclick='map.graphics.clear(graphic);map.infoWindow.hide();return false;'>Remove</a>"
  var infoTemplate = new esri.InfoTemplate(titleHTML);
  infoTemplate.setTitle(titleHTML);
  infoTemplate.setContent(contentHTML);
  graphic = new esri.Graphic(pnt, marker, attr, infoTemplate)
  map.centerAndZoom(pnt, 14);
  map.graphics.add(graphic);
}

function extentHistoryChangeHandler() {
    //  dijit.byId("zoomprev").disabled = navToolbar.isFirstExtent();
    //  dijit.byId("zoomnext").disabled = navToolbar.isLastExtent();
}

////////////////  LAYER CONTROL HANDLERS
function updateLayerVisibility() 
{
    var inputs = dojo.query(".checkboxes"), input;
    if (inputs.length == 0) // skip if using TOC instead of layer list
        return;

    showLayerLoading();
    visible = [];
    for (var i = 0, il = inputs.length; i < il; i++) {
        if (inputs[i].checked) {
            visible.push(inputs[i].id);
        }
    }
    // If no layers visible, must set array to -1 to avoid invalid requests to server
    if (visible.length == 0)
        visible.push(-1);
    clientMapService.setVisibleLayers(visible);
   // hideLayerLoading();
}
function showLayerLoading() {
    loading = dojo.byId("imgMapLoading");
    loading.style.display = "";
}
function hideLayerLoading() {
    loading = dojo.byId("imgMapLoading");
    loading.style.display = "none";
}
////////////// MAP SERVICE HANDLERS
function changeService(select) {
    // Get the options associated with the installation
    var i = document.aspnetForm.ctl00_ContentPlaceHolder1_ddlMapservices.selectedIndex;
    var option = document.aspnetForm.ctl00_ContentPlaceHolder1_ddlMapservices[i];
    var value = option.value;
    //parse value to get coordinate:
    var values = value.split(":");
    var id = values[0];
    var minx = values[1];
    var miny = values[2];
    var maxx = values[3];
    var maxy = values[4];
    service = values[5];

    // Use the options to set service and map extent
    if ((service == 'none') || (typeof (service) == 'undefined')) {
        service = clientMapService;
        changeService2(defaultExtent.xmin, defaultExtent.ymin, defaultExtent.xmax, defaultExtent.ymax, service);
    }
    if (service != clientMapService) {
        //installationServiceLoaded = true;
        changeService2(minx, miny, maxx, maxy, service);
    }
}

function changeService2(minx, miny, maxx, maxy, service) {
    // Remove previous map service if any
    if (mapLayerNew && mapLayerNew.loaded)
        map.removeLayer(mapLayerNew);

    // Hide and then remove existing image layer
   // for (var imgLayer in imgLayers) {
   //     var layerId = imgLayers[imgLayer].layerId;
   //     var layer = map.getLayer(layerId);
   //     layer.hide();
   //     map.removeLayer(layerId);
   // }
   // imgLayers = {};

    // Zoom and center, then add the dynamic map layer.
    if (service != clientMapService) {
        //changeExtent(minx, miny, maxx, maxy, 0);
    } else {
        //changeExtent(minx, miny, maxx, maxy, 0);
    }
    
    mapLayerNew = new esri.layers.ArcGISDynamicMapServiceLayer(REST_Server + service + "/MapServer?token=" + token, { "opacity": layeropacity });
    if (mapLayerNew.loaded) {
        addAdditionalLayer();
    }
    else {
        dojo.connect(mapLayerNew, "onLoad", addAdditionalLayer);
    }
}

// MISC
function addAdditionalLayer(mapLayerNew) {
    try {
        map.addLayer(mapLayerNew);
    }
    catch (theErr) {
    }
}

function setCheckedValue(radioObj, newValue) {
    if (!radioObj)
        return;
    var radioLength = radioObj.length;
    if (radioLength == undefined) {
        radioObj.checked = (radioObj.value == newValue.toString());
        return;
    }
    for (var i = 0; i < radioLength; i++) {
        radioObj[i].checked = false;
        if (radioObj[i].value == newValue.toString()) {
            //radioObj[i].checked = true;
            // check button and also turn on its map layer
            radioObj[i].click();
        }
    }
}

function splitCoordinates(strcoords) { 
    var value = strcoords;
    //parse value to get coordinate:
    var values = value.split("|");
    var minx = values[0];
    var miny = values[1];
    var maxx = values[2];
    var maxy = values[3];
    //alert(value);
    changeExtent(minx, miny, maxx, maxy, 0);
}

function clearFind() {
    map.graphics.clear();
    map.infoWindow.hide();
    dojo.byId("featuresfound").innerHTML = "";
    dojo.byId("resultstitle").style.visibility = "hidden";
    dojo.byId("searchResultsinfo").style.display = "none";
    //var nodata=[];
    //var emptystore = new dojo.data.ItemFileReadStore({ data: nodata });
    //findresultsgrid.setStore(emptystore);
    dojo.byId("gridContainer4").innerHTML = "";
    dojo.byId("gridContainer4").style.visibility = "hidden";
    //map.setExtent(defaultExtent);
}

////// PRINT HANDLERS
function doPrint(template) {
    pdfLink.innerHTML = "";
    pdfMessage.innerHTML = "Creating pdf...";
    pdfLink.style.display = "none";
    printBusyImg.style.display = "";
    var title = dojo.byId("txtTitle").value;
    printClient.add_updateText("Title", title);
    printClient.createPrint(printtemplate, handlePrintResponse, handlePrintError);
}

function handlePrintResponse(response) {
    printBusyImg.style.display = "none";
    if (response != null) {
        url = response;
        // Insert the URL into the <a> hyperlink
        if (url != "" && url.indexOf("http") == 0) {
            PdfLinkMessage1.style.display = "";
            PdfLinkMessage2.style.display = "";
            pdfLink.style.display = "";
            pdfMessage.style.display = "none";
            pdfLink.innerHTML = "here";
            pdfLink.href = url;
        }
        else {
            pdfMessage.style.display = "";
            PdfLinkMessage1.innerHTML = "";
            PdfLinkMessage2.innerHTML = "";
            pdfMessage.innerHTML = "Error occurred creating print. Try again or contact administrator.";
        }
        $(".printpdf").colorbox.resize();
    }
    else {
        pdfMessage.style.display = "";
        PdfLinkMessage1.innerHTML = "";
        PdfLinkMessage2.innerHTML = "";
        pdfMessage.innerHTML = "No data returned from print service. Try again or contact administrator.";
    }
}

function handlePrintError(error) {
    printBusyImg.style.display = "none";
    pdfMessage.innerHTML = "Error occurred during printing. Details:\n" + error.description;
}
