﻿var mapminx = 0;
var mapminy = 0;
var mapmaxx = 0;
var mapmaxy = 0;
var prevminx = 0;
var prevminy = 0;
var prevmaxx = 0;
var prevmaxy = 0;
var currentMapView;
var currMapTitle = "";
var currentTool = "pan";
var currentMapClass;
var currInfoWindowTitle = "";
var mapPoints;    
var mapResultset;
var mapResultsExtent = [];
var tabstripMap = null;
var mapConfig = null;
var popUpGraphic;
var mapDialog = null;

var jsMap, jsNav, jsSR, jsDraw, theDrawConnect, theExtentConnect, theResizeMapConnect, theResizeConnect, theBufferConnect, theGraphicsClickConnect, theGraphicsClearConnect, theGraphicAddConnect
var mapsAdded = "";
var layersToShow = [];
var idMapLayers = [];
var idResults = [];
var idLayers = [];
var idGeometry;
var idLatLong;
var idPoint;
var selResults = [];
var qResults = [];
var qLayer;
var currfeatureSet = null;
var gsvc = null;
var gloc = null;
var timeoutWipeOut = null;
var locatorGrid;
var geocodeStore;

dojo.require("esri.map");
dojo.require("esri.toolbars.navigation");
dojo.require("esri.toolbars.draw");
dojo.require("esri.tasks.identify");
dojo.require("esri.tasks.query");    
dojo.require("esri.tasks.geometry");
dojo.require("esri.tasks.locator");
dojo.require("dojo.fx");
dojo.require("dojox.layout.FloatingPane");
dojo.require("dojox.widget.Dialog");

//dojo.addOnLoad(initMap);   //this is accomplished in displayUtilities.js OnLoad() function

function initMap() {
    esri.config.defaults.map.slider = { left:"15px", top:"75px", width:null, height:"100px" };
    esri.config.defaults.map.zoomSymbol = {color:[0,0,0,64],outline:{color:[0,0,0,255],width:1.5,style:"esriSLSSolid"},style:"esriSFSSolid"}
    var mapInitExtent = document.getElementById("bbusMap_mapInitExtent").value.split(",");
    var mapSR = document.getElementById("bbusMap_mapSpatialReference").value;
    if (mapInitExtent.length == 4)
    {
        var iExtent = new esri.geometry.Extent(parseFloat(mapInitExtent[0]),parseFloat(mapInitExtent[1]),parseFloat(mapInitExtent[2]),parseFloat(mapInitExtent[3]),new esri.SpatialReference({"wkid":mapSR}));
        jsMap = new esri.Map("jsMap",{ extent:iExtent });
    }
    else
        jsMap = new esri.Map("jsMap");
        
    dojo.connect(jsMap, "onLoad", mapLoadHandler);
    wipeLayers('out',1);
    
    var mapServices = document.getElementById("bbusMap_mapServices").value.split(",");
    var mapServiceURLs = document.getElementById("bbusMap_mapServiceURLs").value.split(",");
    var mapDefault = document.getElementById("bbusMap_mapDefault").value;
    var mapLayers = document.getElementById("bbusMap_mapLayers").value;
    if (mapLayers != "")    mapConfig = dojo.fromJson(mapLayers);
    var x;
    var mapService;
    var mapURL;
    var defaultIndex;
    var layer, alayer;
    for (x in mapServices)
    { 
      mapService = mapServices[x];
      if(mapService==mapDefault)defaultIndex = x;
    }
    currentMapView = mapDefault;
    var currTab = getMapTab(currentMapView);
    if (currTab)
        layer = initLayer(mapServiceURLs[defaultIndex],mapServices[defaultIndex],true,currTab.type);
    else
        layer = initLayer(mapServiceURLs[defaultIndex],mapServices[defaultIndex],true);
    for (x in mapServices)
    { 
      mapService = mapServices[x];
      if(mapService!=mapDefault)
      {
        mapURL = mapServiceURLs[x];
        currTab = getMapTab(mapService);
        if (currTab)
            alayer = initLayer(mapURL, mapService, false,currTab.type);
        else
            alayer = initLayer(mapURL, mapService, false);
        if (alayer != null){
            if(alayer.loaded && mapsAdded.indexOf(":"+mapService+":")==-1) 
            {
              jsMap.addLayer(alayer);
              alayer.hide();
              mapsAdded = mapsAdded+":"+mapService+":";
            }
        }
      }
    }
    
    
    jsNav = new esri.toolbars.Navigation(jsMap);
    //dojo.connect(jsNav, "onExtentHistoryChange", extentHistoryChangeHandler);
    jsNav.zoomSymbol = new esri.symbol.SimpleFillSymbol({color:[0,0,0,64],outline:{color:[0,0,0,255],width:1.5,style:"esriSLSSolid"},style:"esriSFSSolid"});
    
}

function testWebService()
{
    var deferred = dojo.xhrPost({
    url:"http://localhost:3214/Mapit.NET/WebService.asmx/HelloWorld",
    handleAs:"text",
    load: function(data){
        alert(data);
    }
    });
}


function initLayer(url, idName, initload, type, initlayer, opacity) {
    if(mapsAdded.indexOf(":"+idName+":")!=-1) 
        return null;
        
    if (opacity == null) opacity = 1.0;
    if (type == "dynamic")
        var layer = new esri.layers.ArcGISDynamicMapServiceLayer(url,{id:idName});
        
    else
        var layer = new esri.layers.ArcGISTiledMapServiceLayer(url,{id:idName});
    if(initload)
    {
        mapsAdded = mapsAdded+":"+idName+":";
        jsMap.addLayer(layer);
        layer.show();
    }
    else
    {
        if (initlayer)
        {    dojo.connect(layer, "onLoad", function() {
                mapsAdded = mapsAdded+":"+idName+":";
                buildLayerList(layer);
                demoLayers();
                layer.setOpacity(opacity);
                jsMap.addLayer(layer);
                layer.show();
                });
        }
        else
        {    dojo.connect(layer, "onLoad", function() {
                mapsAdded = mapsAdded+":"+idName+":";
                layer.hide();
                layer.setOpacity(opacity);
                jsMap.addLayer(layer);
                });
        }
    }
   return layer;
}

function mapLoadHandler()
{
    var mapSR = document.getElementById("bbusMap_mapSpatialReference").value;
    if(mapSR=="map")
    {jsSR = jsMap.spatialReference;}
    else {jsSR = new esri.SpatialReference({"wkid":mapSR});}
    
    jsDraw = new esri.toolbars.Draw(jsMap);
    jsDraw.setFillSymbol(new esri.symbol.SimpleFillSymbol({color:[0,0,0,64],outline:{color:[0,0,0,255],width:1.5,style:"esriSLSSolid"},style:"esriSFSSolid"}));
    setMapIcon();
    dojo.connect(jsMap.graphics, "onClick", setMapIcon);
    dojo.connect(jsMap.graphics, "onClick", clickLocGraphic);
    dojo.connect(jsMap,"onResize",function(){blnResizing=false});
    dojo.connect(jsMap, "onExtentChange", extentHistoryChangeHandler);
    mapminx = jsMap.extent.xmin;
    mapmaxx = jsMap.extent.xmax;
    mapminy = jsMap.extent.ymin;
    mapmaxy = jsMap.extent.ymax;
    setScaleBar();
    //dojo.connect(jsMap, "onUnload", initMap);
    
    
    //add additional map layers
    if (mapConfig != null){
      for (m in mapConfig.layers.maptab)
      {
        var maptab = mapConfig.layers.maptab[m];
        for (l in maptab.layer)
        {
            var initlayer = false;
            if (maptab.id == currentMapView) initlayer = true;
            var maptabLayer = maptab.layer[l];
            alayer = initLayer(maptabLayer.url,maptabLayer.id,false,maptabLayer.type,initlayer,maptabLayer.opacity);
            if (alayer != null){
                if(alayer.loaded && mapsAdded.indexOf(":"+maptabLayer.id+":")==-1) 
                {
                    mapsAdded = mapsAdded+":"+maptabLayer.id+":";
                    if (maptabLayer.opacity != null) 
                        alayer.setOpacity(maptabLayer.opacity);
                    if (initlayer)
                    {
                        buildLayerList(alayer);
                        demoLayers();
                        
                    }
                    else alayer.hide();
                    jsMap.addLayer(alayer);
                }
            }
        }
      }
    }
    hideLayer("BusyIndicator");
    
    
    var setTab = getQueryStringVariable("TabID");
    if(setTab!=null) selectRadTab(setTab);
    
    var PropID = getQueryStringVariable("PropID");
    var PropX = getQueryStringVariable("PropX");
    var PropY = getQueryStringVariable("PropY");
    if(PropID!=null) gotoPropertyDetails(PropID, PropX, PropY);
}      

function getMapTab(id)
{
    var mapTab = null;
    if (mapConfig != null){
      for (m in mapConfig.layers.maptab)
      {
        mapTab = mapConfig.layers.maptab[m];
        if (mapTab.id == id) return mapTab;
      }
    }
    return mapTab;
        
}

function extentHistoryChangeHandler() {
    showGlow(0,0);
    prevminx = mapminx;
    prevminy = mapminy;
    prevmaxx = mapmaxx;
    prevmaxy = mapmaxy;
    mapminx = jsMap.extent.xmin;
    mapmaxx = jsMap.extent.xmax;
    mapminy = jsMap.extent.ymin;
    mapmaxy = jsMap.extent.ymax;
    
    setScaleBar();
    //dijit.byId("zoomprev").disabled = navToolbar.isFirstExtent();
    //dijit.byId("zoomnext").disabled = navToolbar.isLastExtent();
    setMapIcon();
    hideLayer("BusyIndicator");
}

function setScaleBar()
{
    var scale = ((jsMap.extent.xmax - jsMap.extent.xmin)/jsMap.width)*96;
    var divScaleMiles = document.getElementById("divScaleMiles");
    var divScaleKM = document.getElementById("divScaleKM");
    if(divScaleMiles == null || divScaleKM == null) return;
    var units;
    for (var j=0, jl=jsMap.layerIds.length; j<jl; j++) {
      var layer = jsMap.getLayer(jsMap.layerIds[j]);
      if (currentMapView == layer.id) {
        units = layer.units;
      }
    }
    var miles, km;
    if (units == "esriFeet")
    {
        miles = scale/5280;
        km = scale*0.3048/1000;
    }
    if (units == "esriMeters") 
    {
        miles = scale/0.3048/5280;
        km = scale/1000;
    }
    if (units == "esriDecimalDegrees")
    {
        divScaleMiles.innerHTML = "";
        divScaleKM.innerHTML = "";
    }
    else
    {
        divScaleMiles.innerHTML = miles.toFixed(2)+" miles";
        divScaleKM.innerHTML = km.toFixed(2)+" km";
    }
}

function demoLayers()
{
    cancelWipeOut();
    window.setTimeout("wipeLayers('in');",1);
    timeoutWipeOut = window.setTimeout("wipeLayers('out');",5000);
}
function cancelWipeOut()
{
    if (timeoutWipeOut != null)
        window.clearTimeout(timeoutWipeOut);
}
function wipeOutLayers()
{
    cancelWipeOut();
    wipeLayers('out');
}
function wipeInLayers()
{
    cancelWipeOut();
    wipeLayers('in');
}
function wipeLayers(animation, time)
{
    if (time == null) time = 1000;
    if (animation == 'out')
    {
        var wipe = dojo.fx.wipeOut({node: "divWipeMapLayers",duration: time});
        var anim = 'in';
    }
    else
    {
        var wipe = dojo.fx.wipeIn({node: "divWipeMapLayers",duration: time});
        var anim = 'out';
    }
    wipe.play();
    var link = dojo.byId("divWipeLink");
    if (anim == 'in') link.onclick = wipeInLayers;
    if (anim == 'out') link.onclick = wipeOutLayers;
}
    
function clickMapTab()
{
        doNothing();
}

function resizeMapControl()
{
    ResizeInPane('paneRightBody', 'divMap',			 600, 200, -1, 0);

}
function expandMap(expand)
{
    swapDIV('imgSizer_Map',		expand);
}

function activateMapTool(tool)
{
    var prevTool = currentTool;
    currentTool = tool;
    switch (tool)
    {
        case "identify":
            dojo.disconnect(theDrawConnect);
            theDrawConnect = dojo.connect(jsDraw, "onDrawEnd", doIdentify);
            jsNav.deactivate();
            jsDraw.activate(esri.toolbars.Draw.POINT);
            showIdentify();
            break;
        case "select":
            dojo.disconnect(theDrawConnect);
            theDrawConnect = dojo.connect(jsDraw, "onDrawEnd", doSelect);
            jsNav.deactivate();
            jsDraw.activate(esri.toolbars.Draw.POINT);
            showSelect();
            break;
        case "pan":
            jsNav.deactivate();
            jsDraw.deactivate();
            break;
        case "pointer":
            jsNav.deactivate();
            jsDraw.deactivate();
            break;
        case "zoomin":
            //jsDraw.deactivate();
            jsNav.activate(esri.toolbars.Navigation.ZOOM_IN);
            
            break;
        case "zoomout":
            //jsDraw.deactivate();
            jsNav.activate(esri.toolbars.Navigation.ZOOM_OUT);
            break;
        case "zoomprev":
            currentTool = prevTool;
            jsNav.zoomToPrevExtent();
            break;
        case "legend":
            currentTool = prevTool;
            showLegend();
            break;
        case "staticlegend":
            currentTool = prevTool;
            showStaticLegend();
            break;
        case "print":
            currentTool = prevTool;
            printMap();
            break;
        case "printHTML":
            currentTool = prevTool;
            printMapHTML(jsMap);
            break;
        case "locate":
            showLocateAddress();
            break;
        case "measure":
            dojo.disconnect(theDrawConnect);
            theDrawConnect = dojo.connect(jsDraw, "onDrawEnd", doMeasure);
            jsNav.deactivate();
            jsDraw.activate(esri.toolbars.Draw.POLYGON);
            showMeasure();
            break;
        case "drawPortfolioPropPolygon":
            dojo.disconnect(theDrawConnect);
            theDrawConnect = dojo.connect(jsDraw, "onDrawEnd", doDrawPortfolioPropPolygon);
            jsNav.deactivate();
            jsDraw.activate(esri.toolbars.Draw.POLYGON);
            var dp = getGraphicById("drawPortfolioPropPolygon");
            if (dp) jsMap.graphics.remove(dp);
            hideLayer('divPortfolioPropDrawingResults');
            showLayer('divPortfolioPropDrawingInstructions');
            break;
        case "setlocation":
            dojo.disconnect(theDrawConnect);
            theDrawConnect = dojo.connect(jsDraw, "onDrawEnd", doSetLocation);
            jsNav.deactivate();
            jsDraw.activate(esri.toolbars.Draw.POINT);
            break;
        default:
            currentTool = prevTool;
            break;
    }
    GACTTrackEvent("Map","Map Tool",currentTool);
    setMapIcon();
}

function setMapIcon()
{
    if (currentTool == "pointer")
        cur = "pointer";
    else
        cur = "url('img/"+currentTool+".cur'),url('App_Themes/BinaryBus/img/"+currentTool+".cur'),auto";
    document.getElementById("jsMap_container").style.cursor = cur;
}
      
function maptoolsOver()
{
    var maptools = document.getElementById("bbusMap_divMapTools");
    var zoomtools = document.getElementById("divZoomTools");
    var navback1 = document.getElementById("divNavBack1");
    var navback2 = document.getElementById("divNavBack2");
    var navback3 = document.getElementById("divNavBack3");
    maptools.className='maptoolsover';
    //zoomtools.className='maptoolsover';
    navback1.className='maptoolsover';
    navback2.className='maptoolsover';
    navback3.className='maptoolsover';
}

function maptoolsOut()
{
    var maptools = document.getElementById("bbusMap_divMapTools");
    var zoomtools = document.getElementById("divZoomTools");
    var navback1 = document.getElementById("divNavBack1");
    var navback2 = document.getElementById("divNavBack2");
    var navback3 = document.getElementById("divNavBack3");
    maptools.className='maptools';
    //zoomtools.className='maptools';
    navback1.className='maptools';
    navback2.className='maptools';
    navback3.className='maptools';
}

function showMeasure()
{
    removeGraphicsByType('measure');
    showMapPopup();
    setMapPopupTitle("Measure Area or Length");
    expandMapPopup();
    var content = "<div id='divMapMeasure' class='mapPopupSubContent'>Choose what to measure<br>"
    content+= "<input type='radio' name='radioMeasure' checked onclick='jsDraw.activate(esri.toolbars.Draw.POLYGON);' value='area'> Area "
    content+= "<input type='radio' name='radioMeasure' onclick='jsDraw.activate(esri.toolbars.Draw.POLYLINE);' value='length'> Length "
    content+= "<br><br>- Click on the map at each corner (vertex) of the area or length to measure.<br><br>- Double click to complete drawing and display measurement information.</div>"
    setMapPopupContent(content);
}
function doMeasure(geometry)
{
    var mapGsvc = document.getElementById("bbusMap_mapGeometryService").value;
    if (mapGsvc == "") mapGsvc = "http://maps.binarybus.net/arcgis/rest/services/Geometry/GeometryServer";
    if(gsvc == null) gsvc = new esri.tasks.GeometryService(mapGsvc);
    var mg = getGraphicById("measuregeometry");
    if (mg) jsMap.graphics.remove(mg);
    mGeom = geometry;
    mGeom.setSpatialReference(jsSR);
    if (mGeom.type == "polygon")    mSymbol = new esri.symbol.SimpleFillSymbol();
    else    mSymbol = new esri.symbol.SimpleLineSymbol();
    mGraphic = new esri.Graphic(mGeom,mSymbol);
    mGraphic.attributes = { "id":"measuregeometry", "type":"measure" };
    jsMap.graphics.add(mGraphic);
        
    if (mGeom.type == "polygon") gsvc.simplify([mGraphic], function(graphics) {
            gsvc.areasAndLengths(graphics,showAreaResults);
        });
    else  gsvc.simplify([mGraphic], function(graphics) {
            gsvc.lengths(graphics,showLengthResults);
        });
    activateMapTool('pan');
    
}
function showLengthResults(results)
{
    showMapPopup();
    setMapPopupTitle("Measure Length");
    expandMapPopup();
    var units;
    for (var j=0, jl=jsMap.layerIds.length; j<jl; j++) {
      var layer = jsMap.getLayer(jsMap.layerIds[j]);
      if (currentMapView == layer.id) {
        units = layer.units;
      }
    }
    var ft, meters;
    var length = results.lengths[0];
    if (units == "esriFeet")
    {
        ft = length;
        meters = length*0.3048;
    }
    if (units == "esriMeters") 
    {
        ft = length/0.3048;
        meters = length;
    }
    
    var unitLenSelect = "<select id='selLengthUnits' class='measureUnits' onchange='changeLenMeasure(this.options[this.selectedIndex].value)' >"
    unitLenSelect+= "<option value='"+ft.toFixed(2)+"' selected>ft</option>"
    unitLenSelect+= "<option value='"+meters.toFixed(2)+"'>meters</option></select>"
    var content = "<div id='divMapMeasure' class='mapPopupSubContent'><span class='header'>Length:</span><span class='value' id='measureLength'>"+ft.toFixed(2)+"</span>"+unitLenSelect
    content+="<br><br><a href='#' onclick='activateMapTool(&quot;measure&quot;);'>Measure again</a></div>"
    setMapPopupContent(content);
    
}

function showAreaResults(results)
{
    showMapPopup();
    setMapPopupTitle("Measure Area");
    expandMapPopup();
    var units;
    for (var j=0, jl=jsMap.layerIds.length; j<jl; j++) {
      var layer = jsMap.getLayer(jsMap.layerIds[j]);
      if (currentMapView == layer.id) {
        units = layer.units;
      }
    }
    
    var ft, meters, sqft, sqm, acres, ha;
    var length = results.lengths[0];
    var area = results.areas[0];
    if (units == "esriFeet")
    {
        ft = length;
        meters = length*0.3048;
        sqft = area;
        acres = sqft/43560;
        sqm = area*0.3048*.3048;
        ha = sqm/10000;
    }
    if (units == "esriMeters") 
    {
        ft = length/0.3048;
        meters = length;
        sqft = area/0.3048/.3048;
        acres = sqft/43560;
        sqm = area;
        ha = sqm/10000;
    }
    
    var unitAreaSelect = "<select id='selAreaUnits' class='measureUnits' onchange='changeAreaMeasure(this.options[this.selectedIndex].value)' >"
    unitAreaSelect+= "<option value='"+sqft.toFixed(2)+"' selected>sq ft</option>"
    unitAreaSelect+= "<option value='"+acres.toFixed(2)+"'>acres</option>"
    unitAreaSelect+= "<option value='"+sqm.toFixed(2)+"'>sq m</option>"
    unitAreaSelect+= "<option value='"+ha.toFixed(2)+"'>hectares</option></select>"
    var unitLenSelect = "<select id='selLengthUnits' class='measureUnits' onchange='changeLenMeasure(this.options[this.selectedIndex].value)' >"
    unitLenSelect+= "<option value='"+ft.toFixed(2)+"' selected>ft</option>"
    unitLenSelect+= "<option value='"+meters.toFixed(2)+"'>meters</option></select>"
    
    var content = "<div id='divMapMeasure' class='mapPopupSubContent'><span class='header'>Area:</span><span class='value' id='measureArea'>"+sqft.toFixed(2)+"</span>"+unitAreaSelect+"<br><span class='header'>Perimeter:</span><span class='value' id='measureLength'>"+ft.toFixed(2)+"</span>"+unitLenSelect
    content+="<br><br><a href='#' onclick='activateMapTool(&quot;measure&quot;);'>Measure again</a></div>"
    setMapPopupContent(content);
    
}

function changeAreaMeasure(value)
{
    var area = document.getElementById('measureArea');
    area.innerHTML = value;
}
function changeLenMeasure(value)
{
    var len = document.getElementById('measureLength');
    len.innerHTML = value;
}
function showSetLocation()
{
    showMapPopup();
    setMapPopupTitle("Set Location");
    expandMapPopup();
    var content = "<div id='divMapSetLocation' class='mapPopupSubContent'>Click on the map to set the location and begin analysis.<br><br>The Set Location tool allows you to perform analysis from any point on the map.  The analysis available includes demographic and business analysis.</div>"
    setMapPopupContent(content);
}
function doSetLocation(geometry)
{
    mapResultset = "setLocation";
    
    var maptip = document.getElementById("mapTip_"+mapResultset);
    if (maptip == null) return;
    
    slTitle =  maptip.getAttribute("title");
    removeGraphicsByType('setlocation');
    
    slPoint = geometry;
    slPoint.setSpatialReference(jsSR);
    slSymbol = new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/location_flag.gif",24,24);
    slGraphic = new esri.Graphic(slPoint,slSymbol);
    slGraphic.attributes = { "id":"setlocation", "type":"setlocation", "x":slPoint.x, "y":slPoint.y};
    
    popcontent = maptip.innerHTML;   
    slGraphic.infoTemplate = new esri.InfoTemplate(slTitle,popcontent);
    
    var rsSet = 'selectedProperty';
	var graphicID = rsSet+'Graphics';
    var rlayer = jsMap.getLayer(graphicID);
    if (rlayer != null) jsMap.removeLayer(rlayer);
    selectedPropertyGraphicsLayer = new esri.layers.GraphicsLayer({id: 'selectedPropertyGraphics'});
    jsMap.addLayer(selectedPropertyGraphicsLayer);
    jsMap.reorderLayer(selectedPropertyGraphicsLayer,jsMap.layerIds.length+jsMap.graphicsLayerIds.length-1);
    
    
    selectedPropertyGraphicsLayer.add(slGraphic);
    currDemoSiteGraphic = slGraphic;
    getPopUp('setlocation', true);
    activateMapTool('pan');
    
}
function showIdentify()
{
    showMapPopup();
    setMapPopupTitle("Identify Map Layers");
    expandMapPopup();
    var content = "<div id='divMapIdentify' class='mapPopupSubContent'>Click on the map to list map information at that location.</div>"
    setMapPopupContent(content);
}
function doIdentify(geometry)
{
    showLayer("BusyIndicator");
    
    var idg = getGraphicById("identifylocation");
    if (idg) jsMap.graphics.remove(idg);
    idPoint = geometry;
    idSymbol = new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/identify_point.gif",20,20);
    idGraphic = new esri.Graphic(idPoint,idSymbol);
    idGraphic.attributes = { "id":"identifylocation", "type":"identify" };
    jsMap.graphics.add(idGraphic);
    idGeometry = geometry;
    
    var mapGsvc = document.getElementById("bbusMap_mapGeometryService").value;
    if (mapGsvc == "") mapGsvc = "http://maps.binarybus.net/arcgis/rest/services/Geometry/GeometryServer";
    if(gsvc == null) gsvc = new esri.tasks.GeometryService(mapGsvc);
    var outSR = new esri.SpatialReference({ wkid: 4326});
    gsvc.project([ new esri.Graphic( idPoint ) ], outSR, processIDLocation);

}
function processIDLocation(features)
{
    idLatLong = features[0].geometry;
    idMapLayers = [];    
    idResults = [];
    idLayers = [];
    var identifyParams = new esri.tasks.IdentifyParameters();
    identifyParams.tolerance = 4;
    identifyParams.returnGeometry = false;

    identifyParams.geometry = idGeometry;
    identifyParams.layerOption = "visible";
    identifyParams.height = jsMap.height;
    identifyParams.width = jsMap.width;
    identifyParams.mapExtent = jsMap.extent;

    var layerIds = identifyParams.layerIds = [];
    var layer;
    var ix, il;
    layer = jsMap.getLayer(currentMapView);
    for(il in layer.layerInfos)
    {
        if (layer.layerInfos[il].subLayerIds==null)
            layerIds.push(layer.layerInfos[il].id);
    }
    var identify = new esri.tasks.IdentifyTask(layer.url);
    dojo.connect(identify, "onComplete", showIdentifyResults);

    esri.config.defaults.io.proxyUrl = "proxy.ashx";
    idMapLayers.push(layer.id);
    identify.execute(identifyParams);
    
    activateMapTool('pan');
    
    showMapPopup();
    setMapPopupTitle("Identify Map Layers");
    expandMapPopup();
    var content = "<div id='divMapIdentify' class='mapPopupSubContent'>Processing the identify location<br>"+idLatLong.x.toFixed(7)+", "+idLatLong.y.toFixed(7)+"<br><br>The map layer information will display momentarily.</div>"
    setMapPopupContent(content);
    dojo.disconnect(theGraphicsClickConnect);
}

function showIdentifyResults(results)
{
    var sIdLayers = ":::";
    var tidLayers = [];
    for (var i=0, il=results.length; i<il; i++) {
        var graphic = results[i].feature;
        var infoTemplate = new esri.InfoTemplate(results[i].layerName,"${*}");
        if (sIdLayers.indexOf(":::"+results[i].layerName+":::")==-1) {
            sIdLayers = sIdLayers + results[i].layerName + ":::";
            tidLayers.push(results[i].layerName);
        }
        graphic.setInfoTemplate(infoTemplate);
        var tempcont = graphic.getContent();
        tempcont = tempcont.slice(0,tempcont.lastIndexOf("<br/>"));
        idResults.push(results[i].layerName +":::"+ "<table cellspacing='0'><tr><td>"+tempcont.replace(/ = /gi,"</td><td>").replace(/<br\/>/gi,"</td></tr><tr><td>") +"</td></tr></table>");
        
    }
    idLayers = tidLayers.concat(idLayers);
    var layer = null;
    var currMapTab = getMapTab(currentMapView);
    var currMapLayers = null;
    if (currMapTab) currMapLayers = currMapTab.layer;
    if (currMapLayers != null)
    {
        for (ml in currMapLayers)
        {
            if (dojo.indexOf(idMapLayers,currMapLayers[ml].id)==-1) 
            {
                layer = jsMap.getLayer(currMapLayers[ml].id);
                break;
            }
        }
        if (layer)
        {
            var identifyParams = new esri.tasks.IdentifyParameters();
            var layerIds = identifyParams.layerIds = [];
            var ix, il;
            if (layer.declaredClass == "esri.layers.ArcGISDynamicMapServiceLayer") //if it is a dynamic layer
            {
                for(ix in layer.visibleLayers)
                {
                    layerIds.push(parseInt(layer.visibleLayers[ix]));
                }
            }
            else
            {
                for(il in layer.layerInfos)
                {
                if (layer.layerInfos[il].subLayerIds==null)
                    layerIds.push(layer.layerInfos[il].id);
                }
            }
            identifyParams.tolerance = 4;
            identifyParams.returnGeometry = false;
            identifyParams.geometry = idGeometry;
            identifyParams.layerOption = "all";
            identifyParams.height = jsMap.height;
            identifyParams.width = jsMap.width;
            identifyParams.mapExtent = jsMap.extent;

            var identify = new esri.tasks.IdentifyTask(layer.url);
            dojo.connect(identify, "onComplete", showIdentifyResults);

            esri.config.defaults.io.proxyUrl = "proxy.ashx";
            idMapLayers.push(layer.id);
            identify.execute(identifyParams);
        }
    }
    
    if (layer == null)
    {
        idMapLayers = [];
        idGeometry = null;
        esri.config.defaults.io.proxyUrl = null;
        theGraphicsClickConnect =  dojo.connect(jsMap.graphics, "onClick", clickIdGraphic);
        setIdContent(idLayers[0]);
    }
     
}

function setIdContent(curLayer)
{
    showLayer("BusyIndicator");
    
    var idTitle = "<span>"+idLatLong.x.toFixed(7)+", "+idLatLong.y.toFixed(7)+"</span><br>"
    idTitle = idTitle + "<span class='header'>Map Layer:</span><select class='layers' onchange='setIdContent(this.options[this.selectedIndex].value)' >"
    for (var ix=0, ilx= idLayers.length; ix<ilx; ix++) {
        idTitle = idTitle + "<option ";
        if (idLayers[ix]==curLayer) idTitle = idTitle + " selected ";
        idTitle = idTitle + " value='"+idLayers[ix]+"'>"+idLayers[ix]+"</option>";
    }
    idTitle = idTitle + "</select>";
    
    var idContent = "";
    for (var ir=0, irx = idResults.length; ir<irx; ir++) {
        var idTemp = idResults[ir].split(":::");
        if (idTemp[0] == curLayer)
        {
            idContent = idContent+idTemp[1]+"<br/>"
        }    
    }
//    jsMap.infoWindow.setTitle(idTitle);
//    jsMap.infoWindow.setContent(idContent);
//    jsMap.infoWindow.show(jsMap.toScreen(idPoint),jsMap.getInfoWindowAnchor(jsMap.toScreen(idPoint)));
    
    showMapPopup();
    setMapPopupTitle("Identify Map Layers");
    expandMapPopup();
    var content = "<div id='divMapIdentifyHeader' class='mapPopupSubContent'>"+idTitle+"</div>"
    var content = content+"<div id='divMapIdentifyContent' class='mapPopupSubTable'>"+idContent+"</div>"
    setMapPopupContent(content);  
    var divIdContent = document.getElementById('divMapIdentifyContent');
    if (divIdContent.offsetHeight > jsMap.height-100) divIdContent.style.height=(jsMap.height-100)+"px";
    setAltRows('divMapIdentifyContent');
    window.setTimeout("setTableWidth('divMapIdentifyContent');",1);
    
    hideLayer("BusyIndicator");
}

function clickIdGraphic(gEvent)
{
    var g = gEvent.graphic;
    if (g.attributes.type)
    {    
        if(g.attributes.type == "identify") setIdContent(idLayers[0]);
    }
}

function clickLocGraphic(gEvent)
{
    var g = gEvent.graphic;
    currInfoWindowTitle = "";
    if (g.attributes.type)
    {    
        if(g.attributes.type == "location")
        {
            SetSelectedRow(mapResultset,g.attributes.id);
            currInfoWindowTitle = g.infoTemplate.title;
        }
    }
}
function setWinTitle(sTitle)
{
    jsMap.infoWindow.setTitle(sTitle);
    currInfoWindowTitle = sTitle;
} 

function selectFeatureByStringAttribute(val)
{
    var layer = document.getElementById("bbusMap_mapSelectURL").value;
    var id = document.getElementById("bbusMap_mapSelectID").value;
    var field = document.getElementById("bbusMap_mapSelectField").value;
    if(layer==""||field==""||id=="")return;
    layer = layer + "/" + id;
    
    showLayer("BusyIndicator");
    
    var queryTask = new esri.tasks.QueryTask(layer);
    //build query filter

    var query = new esri.tasks.Query();
    query.returnGeometry = true;
    query.where = field+" = '"+val+"'";
    queryTask.execute(query, function(featureSet){
        var results = [];
        for (var i=0, il=featureSet.features.length; i<il; i++) {
          
          results.push(featureSet.features[i]);
        }
        getSelectResults(results);
        });

}

function clearSelect()
{
    selResults = [];
    removeGraphicsByType("select");
    showMapPopup();
    setMapPopupTitle("Select");
    expandMapPopup();
    var content = "<div id='divMapSelect' class='mapPopupSubContent'>"+selResults.length+" features selected<br><a href='#' onclick='clearSelect();'>Clear Selection</a></div>"
    setMapPopupContent(content);
}

function showSelect()
{
    //clearSelect();
    showMapPopup();
    setMapPopupTitle("Select");
    expandMapPopup();
    var content = "<div id='divMapSelect' class='mapPopupSubContent'>Click on the map to select a feature.</div>"
    setMapPopupContent(content);
    
}

function doSelect(geometry)
{
    var layer = document.getElementById("bbusMap_mapSelectURL").value;
    var id = document.getElementById("bbusMap_mapSelectID").value;
    var field = document.getElementById("bbusMap_mapSelectField").value;
    if(layer==""||field==""||id=="")return;
    
    showLayer("BusyIndicator");
    
    var identifyParams = new esri.tasks.IdentifyParameters();
    identifyParams.tolerance = 1;
    identifyParams.returnGeometry = true;

    geometry.setSpatialReference(jsSR);
    identifyParams.geometry = geometry;
    identifyParams.layerOption = "LAYER_OPTION_ALL";
    identifyParams.mapExtent = jsMap.extent;
    identifyParams.height = jsMap.height;
    identifyParams.width = jsMap.width;

    var layerIds = identifyParams.layerIds = [];
    layerIds.push(parseInt(id));
    
    var identify = new esri.tasks.IdentifyTask(layer);
    dojo.connect(identify, "onComplete", function(identifyResults){
        var results = [];
        for (var i=0, il=identifyResults.length; i<il; i++) {
            results.push(identifyResults[i].feature);
        }
        getSelectResults(results);
        });

    
    esri.config.defaults.io.proxyUrl = "proxy.ashx";
    
    identify.execute(identifyParams);
    //activateMapTool('pan');
    
    showMapPopup();
    setMapPopupTitle("Select");
    expandMapPopup();
    var content = "<div id='divMapSelect' class='mapPopupSubContent'>Selecting...<br>The selected features will display momentarily.</div>"
    setMapPopupContent(content);
}

function getSelectResults(results)
{
    esri.config.defaults.io.proxyUrl = null;
    
    var field = document.getElementById("bbusMap_mapSelectField").value;
    for (var i=0, il=results.length; i<il; i++) {
        var graphic = results[i];
        var value = eval("graphic.attributes."+field);
        if (value == null) value="select"+(i+selResults.length);
        
        var inalready = false;
        for (var s=0, sl=selResults.length; s<sl; s++) {
            if (selResults[s].attributes.id == value)
            {
               inalready = true; 
               break;
            } 
        }
        if (inalready) continue;
        
        var attribs = {"id": value, "type":"select"};
        graphic.setAttributes(attribs);
        selResults.push(graphic);
    }
    
    
    showMapPopup();
    setMapPopupTitle("Select");
    expandMapPopup();
    var content = "<div id='divMapSelect' class='mapPopupSubContent'>"+selResults.length+" features selected<br><a href='#' onclick='clearSelect();'>Clear Selection</a>";
    var action = document.getElementById("bbusMap_mapSelectAction").value;
    var actionText = document.getElementById("bbusMap_mapSelectActionText").value;
    if(action != "") var content = content + "<br><br><a href='#' onclick='" + action +"'>"+actionText+"</a>";
    var content = content + "</div>";
    setMapPopupContent(content);
    
    showSelectResults();
    hideLayer("BusyIndicator");
}

function showSelectResults()
{
    removeGraphicsByType("select");
    if(selResults)
    {
        var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_NONE, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASHDOT, new dojo.Color([255,0,0]), 2), new dojo.Color([255,255,0,0.25]));
        for (var i=0, il=selResults.length; i<il; i++) {
          var graphic = selResults[i];
          graphic.setSymbol(symbol);
          if (graphic.geometry!=null) jsMap.graphics.add(graphic);
        }
    }
}

function hideSelectResults()
{
    showSelectResults();
    
    showMapPopup();
    setMapPopupTitle("Select");
    expandMapPopup();
    var content = "<div id='divMapSelect' class='mapPopupSubContent'>"+selResults.length+" features selected<br><a href='#' onclick='clearSelect();'>Clear Selection</a>";
    var action = document.getElementById("bbusMap_mapSelectAction").value;
    var actionText = document.getElementById("bbusMap_mapSelectActionText").value;
    if(action != "") var content = content + "<br><br><a href='#' onclick='" + action +"'>"+actionText+"</a>";
    var content = content + "</div>";
    setMapPopupContent(content);
} 
    
function listSelectResults()
{
    showMapPopup();
    setMapPopupTitle("Select");
    expandMapPopup();
    var content = "<div id='divMapSelect' class='mapPopupSubContent'>"+selResults.length+" features selected<br><a href='#' onclick='clearSelect();'>Clear Selection</a> | <a href='#' onclick='showSelectResults();'>Show Selection</a>";
    var content = content + " | <a href='#' onclick='hideSelectResults()'>Hide List</a><br>";
    for (var s=0, sl=selResults.length; s<sl; s++) {
        var content = content + "<br><a href='#' onclick='gotoPropertyDetails(&quot;"+selResults[s].attributes.id+"&quot;)'>View "+selResults[s].attributes.id+"</a>"
    }
    var content = content + "</div>";
    setMapPopupContent(content);
}

function changeMapView(sMapView) {
    cancelWipeOut();
    wipeLayers('out',1);
    dojo.byId("divMapLayersList").innerHTML = "";
    currentMapView = sMapView;
    hideImageTiledLayers(sMapView);
    layersToShow = [];
    var showLayers = false;
    if (mapConfig != null)
    {
      for (m in mapConfig.layers.maptab)
      {
        var maptab = mapConfig.layers.maptab[m];
        if (maptab.id != sMapView) continue;
        for (l in maptab.layer)
        {
            layersToShow.push(maptab.layer[l].id);
        }
      }
    }
    jsMap.reorderLayer(sMapView, 0);

    for (var j=0, jl=jsMap.layerIds.length; j<jl; j++) 
    {
      var layer = jsMap.getLayer(jsMap.layerIds[j]);
      if (layer.id == sMapView) layer.show();
      else if (dojo.indexOf(layersToShow,layer.id)!=-1) 
      {
            buildLayerList(layer);
            layer.show();
            showLayers = true;
      }
    }
    if (showLayers) demoLayers();
}

function hideImageTiledLayers(sMapView) {
    for (var j=0, jl=jsMap.layerIds.length; j<jl; j++) {
      var layer = jsMap.getLayer(jsMap.layerIds[j]);
      if (sMapView != layer.id) {
        layer.hide();
      }
    }
}

function turnOffMapGraphics() {
    for (var j=0, jl=jsMap.graphicsLayerIds.length; j<jl; j++) {
      var layer = jsMap.getLayer(jsMap.graphicsLayerIds[j]);
      layer.hide();
    }
    hideMapPopup();
    jsMap.graphics.clear();
    jsMap.infoWindow.hide();
}
    
function turnOnMapGraphics(id) {
      var layer = jsMap.getLayer(id);
      if(layer!=null){
      jsMap.reorderLayer(layer,jsMap.layerIds.length+jsMap.graphicsLayerIds.length-1);
      layer.show();
      }
}

function getMapLayerById(sLayerId) {
    for (var j=0, jl=jsMap.layerIds.length; j<jl; j++) {
      var layer = jsMap.getLayer(jsMap.layerIds[j]);
      if (sLayerId == layer.id) {
        return layer;
      }
    }
    return null;
}

function buildLayerList(layer) 
{
    if (layer.declaredClass == "esri.layers.ArcGISDynamicMapServiceLayer") //if there is a dynamic layer
    {  
    var infos = layer.layerInfos, info;
    var items = [];
    var visible = [];
    for (var i=0, il=infos.length; i<il; i++) {
      info = infos[i];
      if (info.parentLayerId == -1 && dojo.indexOf(layer.visibleLayers,info.id)!=-1) {
        visible.push(info.id);
        if (info.subLayerIds != null)
            visible = visible.concat(info.subLayerIds);
        items.push("<input type='checkbox' class='layer_list_item' checked='checked' id='" + info.id + "' onclick='updateLayerVisibility(&quot;"+layer.id+"&quot;);' /><label for='" + info.id + "'>" + info.name + "</label>");
      }
      else if (info.parentLayerId == -1)
        items.push("<input type='checkbox' class='layer_list_item' id='" + info.id + "' onclick='updateLayerVisibility(&quot;"+layer.id+"&quot;);' /><label for='" + info.id + "'>" + info.name + "</label>");
    }
    if (items.length > 0) dojo.byId("divMapLayersList").innerHTML = items.join("<br>");
    else dojo.byId("divMapLayersList").innerHTML = "";

    layer.setVisibleLayers(visible);
    }
    //jsMap.addLayer(layer);
}

function updateLayerVisibility(sLayerId) 
{
    cancelWipeOut();
    var layer = getMapLayerById(sLayerId);
    var inputs = dojo.query(".layer_list_item"), input;
    var visible = [];
    for (var i=0, il=inputs.length; i<il; i++) {
      if (inputs[i].checked) {
        visible.push(inputs[i].id);
      }
    }
    layer.setVisibleLayers(visible);
}

function gotoPropertyOnMap(x,y,strPropertyId)
{
    currPropId = strPropertyId;
	currPropX = x;
	currPropY = y;
	currPropGraphic = getGraphicById(currPropId);
	
	//zoomToPoint(x,y);
	//window.setTimeout('zoomPopUp('+strPropertyId+')',100);
    
	// load Property Details
	if (strPropertyId)
	{
	//    __doPostBack('bbusPropertyDetails$updatePropertyDetails', 'Event=updatePropertyDetails&strPropertyId='+strPropertyId+'&MapEvent=ZoomPoint&x='+ x +'&y='+ y);
        __doPostBack('bbusPropertyDetails$updatePropertyDetails', 'Event=updatePropertyDetails&strPropertyId='+strPropertyId);
        GACTTrack("Property Details");
    
    }
    
	// show "loading..." display

	// go to Property Details page
	hideRadTab('DemoDetails');
	showRadTab('Details');
	selectRadTab('Details');
	selectRadTab('Description');
}

function queryFeature(val)
{
    //alert(val);
    showLayer("BusyIndicator");
    
    var layer = document.getElementById("bbusMap_mapHighlightURL").value;
    var field = document.getElementById("bbusMap_mapHighlightField").value;
        if(layer!=""&&field!="")
        {
            var queryTask = new esri.tasks.QueryTask(layer);
            //build query filter
        
            var query = new esri.tasks.Query();
            query.returnGeometry = true;
            query.where = field+" IN ('"+val.replace(/, /g,",").replace(/,/g,"','")+"')";
            queryTask.execute(query, highlightFeature);

        }
        else 
        {    
            hideLayer("BusyIndicator");
        }
    
}

function highlightFeature(featureSet)
{
    if(featureSet)
    {
    
    currfeatureSet = featureSet;
        
    var graphicID = 'highlightGraphics';
    var highlightGraphicsLayer = jsMap.getLayer(graphicID);
    if (highlightGraphicsLayer == null) 
    {
        highlightGraphicsLayer = new esri.layers.GraphicsLayer({id: 'highlightGraphics'});
        jsMap.addLayer(highlightGraphicsLayer);
    }
    
    theGraphicsClearConnect = dojo.connect(highlightGraphicsLayer, "onGraphicsClear", function(){
        dojo.disconnect(theGraphicsClearConnect);
        //alert("Results Found");
        var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_NONE, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASHDOT, new dojo.Color([255,0,0]), 2), new dojo.Color([255,255,0,0.25]));
            
        var adding = false;
        for (var i=0, il=currfeatureSet.features.length; i<il; i++) {
          
          //Get the current feature from the featureSet.
          //Feature is a graphic
          var graphic = currfeatureSet.features[i];
          graphic.setSymbol(symbol);

          //Set the infoTemplate.
          //graphic.setInfoTemplate(infoTemplate);

          //Add graphic to the map graphics layer.
          if (graphic.geometry!=null) 
          {
            if (graphic.geometry.rings[0][0] != null) 
            {    
                theGraphicAddConnect = dojo.connect(highlightGraphicsLayer, "onGraphicAdd", function(){
                    dojo.disconnect(theGraphicAddConnect);
                    adding = false;
                    });
                adding = true;
                highlightGraphicsLayer.add(graphic);
                highlightGraphicsLayer.show();
            }
          }
        }
        while (adding)
        {
            var x = 0;
        }
        turnOnMapGraphics("selectedPropertyGraphics");
        });

    }
    else
    {
    theGraphicsClearConnect = dojo.connect(highlightGraphicsLayer, "onGraphicsClear", function(){
        dojo.disconnect(theGraphicsClearConnect);
        turnOnMapGraphics("selectedPropertyGraphics");
        });
    }
    
    highlightGraphicsLayer.clear();
    
    hideLayer("BusyIndicator");
    
}

function bufferPoint(thegraphic,thedistance,theunit)
{
    //var layer = document.getElementById("bbusMap_mapHighlightURL").value;
    var mapGsvc = document.getElementById("bbusMap_mapGeometryService").value;
    if (mapGsvc == "") mapGsvc = "http://maps.binarybus.net/arcgis/rest/services/Geometry/GeometryServer";
    if(gsvc == null) gsvc = new esri.tasks.GeometryService(mapGsvc);
      
    showLayer("BusyIndicator");
    
      var params = new esri.tasks.BufferParameters();
      params.features = [ thegraphic ];

      params.distances = [ thedistance ];
      
      if(theunit!=null)
      {
        if(theunit=="miles")    params.unit = esri.tasks.BufferParameters.UNIT_STATUTE_MILE;
        if(theunit=="km")    params.unit = esri.tasks.BufferParameters.UNIT_KILOMETER;
      }
      params.bufferSpatialReference = jsMap.spatialReference;
      params.outSpatialReference = jsMap.spatialReference;

    theBufferConnect = dojo.connect(gsvc, "onBufferComplete", showBuffer);
    gsvc.buffer(params);

}

function showBuffer(features,graphics)
{
    var symbol = new esri.symbol.SimpleFillSymbol(
        esri.symbol.SimpleFillSymbol.STYLE_SOLID,
        new esri.symbol.SimpleLineSymbol(
        esri.symbol.SimpleLineSymbol.STYLE_SOLID,
        new dojo.Color([255,0,0,0.65]), 2
        ),
        new dojo.Color([255,0,0,0.05])
        );
        
    var graphicID = 'bufferGraphics';
    var blayer = jsMap.getLayer(graphicID);
    if (blayer != null) jsMap.removeLayer(blayer);
    
    blayer = new esri.layers.GraphicsLayer({'id': 'bufferGraphics'});
    jsMap.addLayer(blayer);
    jsMap.reorderLayer(blayer,jsMap.layerIds.length+jsMap.graphicsLayerIds.length-1);
    
    
    var newExtent = null;
    var bufGraphics = features[0];
    bufGraphics.setSymbol(symbol);
    bufGraphics.attributes = { 'id':'buffer', 'type':'buffer' };
    newExtent = bufGraphics.geometry.getExtent();//.expand(1.5);
    blayer.add(bufGraphics);
    
    if(graphics) turnOnMapGraphics(graphics);
    else turnOnMapGraphics('selectedPropertyGraphics');
    if(newExtent)    
       jsMap.setExtent(newExtent.expand(2));
    
    hideLayer("BusyIndicator");
    
}

function showLocateAddress()
{
    showMapPopup();
    setMapPopupTitle("Locate Address");
    expandMapPopup();
    var content = "<div id='divMapLocateAddress' class='mapPopupSubContent'>";
    var content = content+"<div style='width:110px;height:25px;text-align:right;float:left;'>Address or Street:&nbsp;</div><div style='width:125px;height:25px;text-align:left;float:left;'><input id='inpLocateAdd' type='text' style='width:120px'></input></div>";
    var content = content+"<div style='width:110px;height:25px;text-align:right;float:left;'>Intersection Street:&nbsp;</div><div style='width:125px;height:25px;text-align:left;float:left;'><input id='inpLocateStInt' type='text' style='width:120px'></input></div>";
    var content = content+"<div style='width:110px;height:25px;text-align:right;float:left;'>Zip Code:&nbsp;</div><div style='width:125px;height:25px;text-align:left;float:left;'><input id='inpLocateZip' type='text' style='width:120px'></input></div>";
    var content = content+"<div class='searchbutton' style='width:200px;text-align:center;float:left;'><a href='#' onclick='geocodeAddress(\"inpLocateAdd\",\"inpLocateStInt\",\"inpLocateZip\")'>Search</a></div></div>";
    setMapPopupContent(content);
}

function geocodeAddress(sStAdd,sStInt,sZip,sCity,sState,locateType)
{
    showLayer("BusyIndicator");
    
    var valStAdd, valStInt, valZip, valCity, valState;
    var inStAdd,inStInt,inZip,inCity,inState;
    if(sStAdd!=null)inStAdd = document.getElementById(sStAdd);
    if(sStInt!=null)inStInt= document.getElementById(sStInt);
    if(sZip!=null)inZip = document.getElementById(sZip);
    if(sCity!=null) inCity= document.getElementById(sCity);
    if(sState!=null) inState = document.getElementById(sState);
    if (inStAdd == null) valStAdd = "";
    else valStAdd = inStAdd.value;
    if (inStInt == null) valStInt = "";
    else valStInt = inStInt.value;
    if (inZip == null) valZip = "";
    else valZip = inZip.value;
    if (inCity == null) valCity = "";
    else valCity = inCity.value;
    if (inState == null) valState = "";
    else valState = inState.value;
    if (valStInt.length > 0) valStAdd = valStAdd + " @ "+valStInt;
    
    var mapGLoc = document.getElementById("bbusMap_mapLocatorService").value;
    if (mapGLoc == "") return;
    if(gloc == null) gloc = new esri.tasks.Locator(mapGLoc);
    //dojo.connect(gloc, "onAddressToLocationsComplete", showGeocodeResults);

    turnOffMapGraphics();
    var address = {};
    if(locateType=='AddressCityStateZip')
    {
        address.Address = valStAdd;
        address.City = valCity;
        address.State = valState;
        address.Zip = valZip;
    }
    else
    {
        address.Street = valStAdd;
        address.Zone = valZip;
    }
    
    
    var mapGLocSR = document.getElementById("bbusMap_mapLocatorSpatialReference").value;
    if (mapGLocSR == jsSR.wkid.toString())
        gloc.addressToLocations(address,null,showGeocodeResults);
    else
        gloc.addressToLocations(address,null,projectGeocodeResults);
    
    if (mapDialog) mapDialog.hide();
    //else hideMapPopup();
}

function projectGeocodeResults(candidates)
{
    
    esri.config.defaults.io.proxyUrl = "proxy.ashx";
    
    if (candidates.length > 0)
    {
        var mapGLocSR = document.getElementById("bbusMap_mapLocatorSpatialReference").value;
        var gcGraphics = [];
        for (var i=0, il=candidates.length; i<il&&i<20; i++) {
                candidate = candidates[i];
                var attribs = { "id": "geocode"+i , "type": "geocode", "address": candidate.address.replace("&","@"), "score":candidate.score, "x": candidate.location.x, "y":candidate.location.y , "symbol":"0"}
                var pt_point = candidate.location;
                pt_point.setSpatialReference(new esri.SpatialReference({"wkid":mapGLocSR}));
                var pt_graphic = new esri.Graphic(pt_point);
                pt_graphic.attributes = attribs;
                gcGraphics.push(pt_graphic);
        }
    
        
        var mapGsvc = document.getElementById("bbusMap_mapGeometryService").value;
        if (mapGsvc == "") mapGsvc = "http://maps.binarybus.net/arcgis/rest/services/Geometry/GeometryServer";
        if(gsvc == null) gsvc = new esri.tasks.GeometryService(mapGsvc);
        gsvc.project(gcGraphics, jsSR, showGeocodeResults);
        
    }
    else
    {
        showGeocodeResults(candidates);
    }
}

function showGeocodeResults(candidates)
{
    
    esri.config.defaults.io.proxyUrl = null;
    
    var maptip = document.getElementById("mapTip_geocode");
    if (maptip == null) return;
    var title = maptip.getAttribute("title");
    var popcontent = maptip.innerHTML;
    
    var candidate;
    var hidXML = "";
    var items = [];
    showMapPopup();
    setMapPopupTitle("Locations");
    expandMapPopup();
    var geocodeResultsExtent;
     
    if (candidates.length > 0)
    {
        var gRenderer = new esri.renderer.UniqueValueRenderer(new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/location_flag.gif",24,24), "symbol");
        
        //Create graphics layer
        var gclayer = jsMap.getLayer("selectedPropertyGraphics");
        if (gclayer != null) jsMap.removeLayer(gclayer);
        var alt = false;
        var glayer = new esri.layers.GraphicsLayer({id: 'selectedPropertyGraphics'});
        jsMap.addLayer(glayer);
        jsMap.reorderLayer(glayer,jsMap.layerIds.length+jsMap.graphicsLayerIds.length-1);
        glayer.setRenderer(gRenderer);
        for (var i=0, il=candidates.length; i<il&&i<20; i++) {
            candidate = candidates[i];
            var pt_graphic;
            if (candidate.geometry)
            {
                pt_graphic = candidate;
                pt_graphic.attributes.x = pt_graphic.geometry.x;
                pt_graphic.attributes.y = pt_graphic.geometry.y;
            }
            else
            {
                var attribs = { "id": "geocode"+i , "type": "geocode", "address": candidate.address.replace("&","@"), "score":candidate.score, "x": candidate.location.x, "y":candidate.location.y , "symbol":"0"}
                var pt_point = candidate.location;
                pt_point.setSpatialReference(jsSR);
                pt_graphic = new esri.Graphic(pt_point);
                pt_graphic.attributes = attribs;
            }
            
            geocodeResultsExtent = addToLayerExtent(geocodeResultsExtent, pt_graphic.geometry.x, pt_graphic.geometry.y);
            if (popcontent != "")    pt_graphic.infoTemplate = new esri.InfoTemplate(title,popcontent);
            glayer.add(pt_graphic);
            
            var row = "<tr class='"+((alt)? "mapPopupTableAltRow":"mapPopupTableRow") +"' onclick=\"rowGetPopUp(this,'geocode"+i+"')\" onmouseover='highlightRow(this,true);showGlow("+pt_graphic.attributes.x+","+pt_graphic.attributes.y+")' onmouseout='highlightRow(this,false);showGlow(0,0);'>";
            row = row + "<td >"+pt_graphic.attributes.address+"</td><td width='20px'>"+pt_graphic.attributes.score+"%</td></tr>";
            items.push(row);
            
            alt = !alt;
        }
        
        glayer.show();
        
        if(candidates.length == 1) 
        {
            window.setTimeout('getPopUp("geocode0",true);',500);
            hideMapPopup();
        }
        else
        {
            var content = "<div id='divMapAddressResults' class='mapPopupSubTable' ><table cellpadding='0' cellspacing='0' >";
            content = content + items.join(" ");
            content = content + "</table></div>";
            setMapPopupContent(content);
            var divIdContent = document.getElementById('divMapAddressResults');
            if (divIdContent.offsetHeight > jsMap.height-100) divIdContent.style.height=(jsMap.height-100)+"px";
            window.setTimeout("setTableWidth('divMapAddressResults');",10);
        }
        jsMap.setExtent(geocodeResultsExtent,true);   
    }
    else
    {
        var content = "<div id='divMapAddressResults' class='mapPopupSubContent'>No Addresses found.</div>";
        setMapPopupContent(content);
    }

     
    hideLayer("BusyIndicator");
}

function zoomToPoint(thex,they)
{
    if(thex==null||they==null)return;
    var mapPropZoom = document.getElementById("bbusMap_mapPropertyZoomLevel").value;
    if (mapPropZoom == null) mapPropZoom = "8";
    var mapLevel = parseInt(mapPropZoom);
    
    showLayer("BusyIndicator");
    //var mapOffset = ((mapmaxy-mapminy)*.01)
    var pt_point = new esri.geometry.Point(thex, they, jsSR);
    
    jsMap.centerAndZoom(pt_point, mapLevel);
}
    

function ZoomResultSet(resultset, page){
    showLayer("BusyIndicator");
    selectRadTab('Map');
    
	//disableRadTab("Property");
	//if (mapisvisible)
    //	__doPostBack('bbusMap_MapProcessPanel', 'MapEvent=ZoomResultSet&ResultSet='+resultset+'&Page='+page);
    
    setExtent(mapResultsExtent[0],mapResultsExtent[1],mapResultsExtent[2],mapResultsExtent[3]);
    mapResultset = resultset;
    turnOffMapGraphics();
    window.setTimeout('showMapPoints();',50);
}

function addToLayerExtent(extent, xcoord, ycoord)
{
    var newextent = null;
    if(extent == null){ newextent = new esri.geometry.Extent(xcoord, ycoord, xcoord, ycoord, jsSR);}
    else { newextent = extent.union(new esri.geometry.Extent(xcoord, ycoord, xcoord, ycoord, jsSR));}
    return newextent;
}


function setExtent(xmin,ymin,xmax,ymax)
{
    var newExtent = new esri.geometry.Extent(xmin, ymin, xmax, ymax, jsSR) 
    jsMap.setExtent(newExtent,true);
}

function ZoomMapFull(){
    showLayer("BusyIndicator");
    //jsNav.zoomToFullExtent();  //this appears buggy - requires map object to be called "map"?
    var mapInitExtent = document.getElementById("bbusMap_mapInitExtent").value.split(",");
    var iExtent;
    if (mapInitExtent.length == 4)
    {
        iExtent = new esri.geometry.Extent(parseFloat(mapInitExtent[0]),parseFloat(mapInitExtent[1]),parseFloat(mapInitExtent[2]),parseFloat(mapInitExtent[3]));
    }
    else
    {
        var layer = jsMap.getLayer(jsMap.layerIds[0]);
        iExtent = layer.fullExtent;
    }
   jsMap.setExtent(iExtent);
}

function Pan(direction){
    switch(direction)
    {
      case "N":
        jsMap.panUp();
        break;
      case "S":
        jsMap.panDown();
        break;
      case "E":
        jsMap.panRight();
        break;
      case "W":
        jsMap.panLeft();
        break;
    }
     
}   

function clearMap(){
    mapPoints = "";
    mapResultset = "";
    turnOffMapGraphics();
    ZoomMapFull();
    //__doPostBack('MapProcessPanel', 'MapEvent=ClearMap');
    
}

//update map extent
function updateMapExtent(extentParams){
    var ext = extentParams.split(":");
    prevminx = mapminx;
    prevminy = mapminy;
    prevmaxx = mapmaxx;
    prevmaxy = mapmaxy;
    mapminx = parseFloat(ext[0]);
    mapminy = parseFloat(ext[1]);
    mapmaxx = parseFloat(ext[2]);
    mapmaxy = parseFloat(ext[3]);
}

function setMapPoints(resultset,extent,points)
{
    mapResultset = resultset;
    mapPoints = points;
   
    if(extent != null)
    {
        mapResultsExtent = extent;
        theExtentConnect = dojo.connect(jsMap, "onExtentChange", displayPoints);
            setExtent(mapResultsExtent[0],mapResultsExtent[1],mapResultsExtent[2],mapResultsExtent[3]);
    }
    else  displayPoints();
}

function displayPoints()
{
    dojo.disconnect(theExtentConnect);
    jsMap.infoWindow.hide();
    
//    theGraphicsClearConnect = dojo.connect(jsMap.graphics, "onGraphicsClear", function(){
//        dojo.disconnect(theGraphicsClearConnect);
//        window.setTimeout('showMapPoints();',10);
//        });
//    
//    
//    window.setTimeout('jsMap.graphics.clear();',10);
    
    turnOffMapGraphics();
    showMapPoints();
}

function showMapPoints()
{
    if(mapPoints != "")
        PlotPoints(mapPoints);
}

function zoomPopUp(idgraphic)
{
    //var idgraphic = getGraphicById(id);
    
    if(idgraphic != null)
    {       queryFeature(idgraphic.attributes.pid);
            showPopUp(idgraphic,false,true);
            }
}

function getGraphicById(id)
{
    var thegraphic = null;
    var aGraphics = jsMap.graphics.graphics;
    var thegraphic = null;
    var i;
    for(i in aGraphics)
    {
      if(aGraphics[i].attributes.id)
      {
        if(aGraphics[i].attributes.id == id)
        {            
            thegraphic = aGraphics[i];
            return thegraphic;
        }
      }
    }
    
    var ig;
    for (var j=0, jl=jsMap.graphicsLayerIds.length; j<jl; j++) {
      aGraphics = jsMap.getLayer(jsMap.graphicsLayerIds[j]).graphics;
      for(ig in aGraphics)
      {
        if(aGraphics[ig].attributes.id)
        {
            if(aGraphics[ig].attributes.id == id)
            {            
                thegraphic = aGraphics[ig];
               if(thegraphic.symbol==null) thegraphic.setSymbol(jsMap.getLayer(jsMap.graphicsLayerIds[j]).renderer.getSymbol(thegraphic));
                return thegraphic;
            }
        }
      }
    }
    return thegraphic;
    
}

function removeGraphicsByType(type)
{
    var i;
    var aGraphics = jsMap.graphics.graphics;
    var thegraphics = [];
    for(i in aGraphics)
    {
      if(aGraphics[i].attributes.type)
      {
        if(aGraphics[i].attributes.type == type)
        {            
            thegraphics.push(aGraphics[i]);
        }
      }
    }
    
    for(var g=0, ig=thegraphics.length; g<ig; g++)  {
        jsMap.graphics.remove(thegraphics[g]);
    }
}

function getPopUp(id, b_pan)
{
    var idgraphic = getGraphicById(id);
    if(idgraphic)
        showPopUp(idgraphic,b_pan,true);
}

function showPopUp(thegraphic, b_pan, blnShow)
{
    var b_setAnchor = false;
    currInfoWindowTitle = thegraphic.getTitle();
    jsMap.infoWindow.setTitle(currInfoWindowTitle);
    jsMap.infoWindow.setContent(thegraphic.getContent());
    popUpGraphic = thegraphic;
    if(thegraphic.geometry.type == 'point')
    {
        if((b_pan)&&((thegraphic.geometry.x>mapmaxx)||(thegraphic.geometry.x<mapminx)||(thegraphic.geometry.y>mapmaxy)||(thegraphic.geometry.y<mapminy)))
        { 
            b_setAnchor = true;
            theExtentConnect = dojo.connect(jsMap, "onExtentChange", function(){
                dojo.disconnect(theExtentConnect);
                jsMap.infoWindow.show(jsMap.toScreen(popUpGraphic.geometry),esri.dijit.InfoWindow.ANCHOR_LOWERLEFT);
                });
            jsMap.centerAt(thegraphic.geometry);
        }
    }
    if (blnShow)
    {
        if(b_setAnchor)  jsMap.infoWindow.show(jsMap.toScreen(thegraphic.geometry),esri.dijit.InfoWindow.ANCHOR_LOWERLEFT);
        else    jsMap.infoWindow.show(jsMap.toScreen(thegraphic.geometry),jsMap.getInfoWindowAnchor(jsMap.toScreen(thegraphic.geometry)));
    }
}

function PlotPoints(points) //points is a string composed of n number of "<x>||||<y>||||<id>||||<name>||||<n...>" coordinate sets separated by ";;;;"
{
    buildPointsGraphicsLayer(mapResultset,points,true);
}

function buildPointsGraphicsLayer(resultsset,points,blnVisible) //points is a string composed of n number of "<x>||||<y>||||<id>||||<name>||||<n...>" coordinate sets separated by ";;;;"
{
    var maptip = document.getElementById("mapTip_"+resultsset);
    if (maptip == null) return;
    
    pArray = points.split(";;;;");
    arraylength = pArray.length;
    var pt_graphic;
    var pt_point;
    var xcoord;
    var ycoord;
    var title;
    var att_id;
    var att_pid;
    var symbol_id;
    var rRenderer = new esri.renderer.UniqueValueRenderer(new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/location_point.gif",20,20), "symbol");
    rRenderer.addValue("1", new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/location_point_1.gif",20,20));
    rRenderer.addValue("2", new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/location_point_2.gif",20,20));
    rRenderer.addValue("3", new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/location_point_3.gif",20,20));
    rRenderer.addValue("4", new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/location_point_4.gif",20,20));
    rRenderer.addValue("5", new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/location_point_5.gif",20,20));
    rRenderer.addValue("6", new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/location_point_6.gif",20,20));
    rRenderer.addValue("7", new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/location_point_7.gif",20,20));
    rRenderer.addValue("8", new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/location_point_8.gif",20,20));
    rRenderer.addValue("9", new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/location_point_9.gif",20,20));
    rRenderer.addValue("10", new esri.symbol.PictureMarkerSymbol("/App_Themes/BinaryBus/img/location_point_10.gif",20,20));
    
    //Create graphics layer
    var graphicID = resultsset+"Graphics";
    var rlayer = jsMap.getLayer(graphicID);
    rlayer.setRenderer(rRenderer);
    
    var popcontent = "";
   
    var i;
    for(i=pArray.length-1; i>=0; i--)
    {
        pointsArray = pArray[i].split("||||");
        
        xcoord = parseFloat(parseIndexes(maptip.getAttribute("x"),pointsArray));
        ycoord = parseFloat(parseIndexes(maptip.getAttribute("y"),pointsArray));
        title = parseIndexes(maptip.getAttribute("title"),pointsArray);
        att_id = parseIndexes(maptip.getAttribute("att_id"),pointsArray);
        att_pid = parseIndexes(maptip.getAttribute("att_pid"),pointsArray);
        symbol_id = parseIndexes(maptip.getAttribute("symbol_id"),pointsArray);
        pt_point = new esri.geometry.Point(xcoord, ycoord, jsSR);
        
        pt_graphic = new esri.Graphic(pt_point);
        pt_graphic.attributes = { "type":"location", "id": att_id , "pid": att_pid , "symbol": symbol_id };
        
        popcontent = "";
        popcontent = parseIndexes(maptip.innerHTML,pointsArray);     

        if (popcontent != "")    pt_graphic.infoTemplate = new esri.InfoTemplate(title,popcontent);
        rlayer.add(pt_graphic);
        
    }
    if (blnVisible) rlayer.show();
}

function pointToGoogle(thexVal,theyVal)
{
    var pt_point = new esri.geometry.Point(thexVal, theyVal, jsSR);
    
    var mapGsvc = document.getElementById("bbusMap_mapGeometryService").value;
    if (mapGsvc == "") mapGsvc = "http://maps.binarybus.net/arcgis/rest/services/Geometry/GeometryServer";
    if(gsvc == null) gsvc = new esri.tasks.GeometryService(mapGsvc);
    var outSR = new esri.SpatialReference({ wkid: 4326});
    gsvc.project([ new esri.Graphic( pt_point ) ], outSR, function(features){
        showGoogle(features[0].geometry.x,features[0].geometry.y);
        
    });
}

function pointToBing(thexVal,theyVal)
{
    var pt_point = new esri.geometry.Point(thexVal, theyVal, jsSR);
    
    var mapGsvc = document.getElementById("bbusMap_mapGeometryService").value;
    if (mapGsvc == "") mapGsvc = "http://maps.binarybus.net/arcgis/rest/services/Geometry/GeometryServer";
    if(gsvc == null) gsvc = new esri.tasks.GeometryService(mapGsvc);
    var outSR = new esri.SpatialReference({ wkid: 4326});
    gsvc.project([ new esri.Graphic( pt_point ) ], outSR, function(features){
        showBing(features[0].geometry.x,features[0].geometry.y);
        
    });
}
 
function parseIndexes(value,pointsArray)
{
    var str = value;
    var repval = "";
    var rex = new RegExp("{.}","g");
    var result=rex.exec(str);
    while (result!=null) 
    {
        repval = "pointsArray["+result.toString().replace("{","").replace("}","")+"]";
        str = str.replace(result,eval(repval));
        result=rex.exec(str); 
    }
    return str;
}

function OnMapTabLoad(sender)
{
    currMapTitle = sender.SelectedTab.Text;
    tabstripMap = sender;
    tabstripMap.OnClientTabSelected = OnMapTabSelectedHandler;
}

function unselectMapTab(strTabText)
{
	var tab = tabstripMap.FindTabByText(strTabText);
	if (tab)
	{
		tab.UnSelect();
	}
}
function selectMapTab(strTabText)
{
	var tab = tabstripMap.FindTabByText(strTabText);
	if (tab)
	{
		tab.Enable();
		tab.Select();
	}
}

function OnMapTabSelectedHandler(sender, eventArgs)
{
    currMapTitle = eventArgs.Tab.Text;
	if (eventArgs.Tab.Value.length > 0)
	{
		eval(eventArgs.Tab.Value);
	}
}

function showLegend()
{
    mapminx = jsMap.extent.xmin;
    mapmaxx = jsMap.extent.xmax;
    mapminy = jsMap.extent.ymin;
    mapmaxy = jsMap.extent.ymax;
    mapw = jsMap.width;
    maph = jsMap.height;
    var mapurl;
    for (var j=0, jl=jsMap.layerIds.length; j<jl; j++) {
      var layer = jsMap.getLayer(jsMap.layerIds[j]);
      if (currentMapView == layer.id) {
        mapurl = layer.url;
      }
    }
    var mapname = currentMapView;
    var mapNames = document.getElementById("bbusMap_mapServiceMapNames").value;
    if (mapNames!= "")
    {
        var arrMapNames = mapNames.split(",");
	    var arrMapServices = document.getElementById("bbusMap_mapServices").value.split(",");
	    for (var am in arrMapServices)
	    {
	        if(arrMapServices[am]==currentMapView)
	            mapname = arrMapNames[am];
	    }
	}
    
    //__doPostBack('', 'MapEvent=PrintMap&MapURL='+mapurl+'&MapName='+currentMapView+'&MinX='+mapminx+'&MinY='+mapminy+'&MaxX='+mapmaxx+'&MaxY='+mapmaxy);
    var url = 'Dialogs/legend.aspx?MapTitle='+currMapTitle+'&MapURL='+mapurl+'&MapName='+mapname+'&MinX='+mapminx+'&MinY='+mapminy+'&MaxX='+mapmaxx+'&MaxY='+mapmaxy+'&MapW='+mapw+'&MapH='+maph;
    
    
    showMapPopup();
    setMapPopupTitle("Legend");
    expandMapPopup();
    var content = "<iframe id='iframeLegend' class='legendFrame' frameborder='0' src='"+url+"' ></iframe>"
    setMapPopupContent(content);
    GACTTrack("Map Legend");
}
function showStaticLegend()
{
    showMapPopup();
    setMapPopupTitle("Legend");
    expandMapPopup();
    var content = "<div class='staticLegend'></div>"
    setMapPopupContent(content);
}

function setMapPopupTitle(title)
{
    var mapPopupTitle = document.getElementById("mapPopupTitle");
    mapPopupTitle.innerHTML = title;
 
}
function setMapPopupContent(content)
{
    var divMapPopupContent = document.getElementById("divMapPopupContent");
    if (content.innerHTML) {divMapPopupContent.innerHTML = ""; divMapPopupContent.appendChild(content);}
    else divMapPopupContent.innerHTML = content;
    
}
function showMapPopup()
{
    var divMapPopup = document.getElementById("divMapPopup");
    divMapPopup.className = "mapPopupShow";

}
function expandMapPopup()
{
    var divMapPopupContent = document.getElementById("divMapPopupContent");
    divMapPopupContent.className = "mapPopupContent"; 
    
    var divCollapse = document.getElementById("divCollapseMapPopup");
    divCollapse.onclick = collapseMapPopup;
    divCollapse.className = "collapse"
}
function collapseMapPopup()
{
    var divMapPopupContent = document.getElementById("divMapPopupContent");
    divMapPopupContent.className = "mapPopupHide"; 
    var divCollapse = document.getElementById("divCollapseMapPopup");
    divCollapse.onclick = expandMapPopup;
    divCollapse.className = "expand"
}
function hideMapPopup(reset)
{
    setMapPopupContent("");
    var divMapPopup = document.getElementById("divMapPopup");
    divMapPopup.className = "mapPopupHide";
    removeGraphicsByType("measure");
    removeGraphicsByType("select");
    if(!reset) activateMapTool('pan');
}
function setMapDialogTitle(title)
{
    if(mapDialog) mapDialog.attr('title', title);
    
}
function setMapDialogContent(content)
{
    if(mapDialog) mapDialog.attr('content', content);
}
function showMapDialog()
{
    if (mapDialog == null)
    {
        mapDialog = new dojox.widget.Dialog({
            id: "mapDialog",
            showTitle: true,
            draggable: true,
            modal: false,
            dimensions: [240,300],
            layoutAlign: "right",
            viewportPadding:20
            }, dojo.byId("divMapFloatingPane"));
        mapDialog.startup();
        dojo.connect(mapDialog,"onClose",hideMapDialog);
        dojo.connect(mapDialog,"onCancel",hideMapDialog);
    }
    
    mapDialog.show();
//    dojo.style(mapFloatingPane.domNode, "top", "5px");
//    dojo.style(mapFloatingPane.domNode, "right", "5px");
//    dojo.style(mapFloatingPane.domNode, "left", "auto");
//    dojo.style(mapFloatingPane.domNode, "z-index", "500");
    dojo.query('#mapDialog_underlay').style({ "width":"0px", "visibility":"hidden" });

}
function hideMapDialog(reset)
{
    setMapPopupContent("");
    removeGraphicsByType("measure");
    removeGraphicsByType("select");
    if(!reset) activateMapTool('pan');
}

function printMap()
{
    var d = new Date();
	
	mapminx = jsMap.extent.xmin;
    mapmaxx = jsMap.extent.xmax;
    mapminy = jsMap.extent.ymin;
    mapmaxy = jsMap.extent.ymax;
    mapw = jsMap.width;
    maph = jsMap.height;
    var srid = jsSR.wkid;
    var mapurl;
    for (var j=0, jl=jsMap.layerIds.length; j<jl; j++) {
      var layer = jsMap.getLayer(jsMap.layerIds[j]);
      if (currentMapView == layer.id) {
        mapurl = layer.url;
      }
    }
    
    var mapname = currentMapView;
    var mapNames = document.getElementById("bbusMap_mapServiceMapNames").value;
    if (mapNames!= "")
    {
        var arrMapNames = mapNames.split(",");
	    var arrMapServices = document.getElementById("bbusMap_mapServices").value.split(",");
	    for (var am in arrMapServices)
	    {
	        if(arrMapServices[am]==currentMapView)
	            mapname = arrMapNames[am];
	    }
	}
    
    var url = 'Dialogs/print_map.aspx?t='+d.getTime()+'&type=Map&MapURL='+mapurl+'&MapName='+mapname+'&MinX='+mapminx+'&MinY='+mapminy+'&MaxX='+mapmaxx+'&MaxY='+mapmaxy+'&MapW='+mapw+'&MapH='+maph+'&SRID='+srid;
    if (mapResultset == 'propertyDetails')
        url = url + '&x='+currPropX+'&y='+currPropY+'&pin='+currPropGraphic.attributes.pid;
    else
        url = url + '&ResultSet='+mapResultset;
    var pFrame = document.getElementById('iframePrintMap');
    pFrame.src = url;
    
    GACTTrack("Print Map");
}

function processCallbackResult(response, context) {
    if (response==null || response.length==0)
    {
        return;
    }
    
    var ov2 = null;
	var pairs = response.split("^^^");
	var actions;
	var o;
	var action;
    var controlType = "";
	var controlID = "";
	var responseItem = "";
	var validResponse = false;
	for (var i=0;i<pairs.length;i++)
	{
		actions = pairs[i].split(":::");
		responseItem = pairs[i];
		if (responseItem==null || responseItem.length==0) 
		    continue;
		controlType = actions[0].toLowerCase();
		controlID = actions[1];
		action = actions[2].toLowerCase();
		switch (controlType) {
		    case "map":
		        map2 = Maps[controlID];
                if (action=="changelevel") {
		            validResponse = true;
		            var minCol = (actions[13]==null) ? 0 : actions[13];
		            var minRow = (actions[14]==null) ? 0 : actions[14];  
					var resourceLimits = (actions[15]==null) ? "" : actions[15];
					var resourceMapping = (actions[16]==null) ? "": actions[16];
		            window.setTimeout("Maps['" + controlID + "'].setUpLevelGrid(" + actions[3] + "," + actions[4] + "," + actions[5] + "," + actions[6] + "," + actions[7] + "," + actions[8] + "," + actions[9] + "," + actions[10] + "," + actions[11] + "," + actions[12] + "," + minCol + "," + minRow + ", '" + resourceLimits + "', '" + resourceMapping + "');", 1);
		        } 
		        else if (action=="shiftgrid") {
		            validResponse = true;
		            window.setTimeout("Maps['" + controlID + "'].shiftGrid(" + actions[3] + "," + actions[4] + "," + actions[5] + "," + actions[6]  + ");", 1);
		        }
		        else if (action=="gettiles") {
		            validResponse = true;
		            window.setTimeout("Maps['" + controlID + "'].updateView(true);", 1);
		        }
		        else if (action=="cleargrid") {
		            validResponse = true;
					var resourceLimits = (actions[4]==null) ? "" : actions[4];
		            if (actions.length>3)
		                 window.setTimeout("Maps['" + controlID + "'].clearLevelGrid('" + actions[3] + "','" + resourceLimits + "');", 1);
		            else   
		                window.setTimeout("Maps['" + controlID + "'].clearLevelGrid(null,'" + resourceLimits + "');", 1);
		        }
		        else if (action=="tileserverurl") {
		            validResponse = true;
		            if (actions[3].toLowerCase()=="null") actions[3] = "";
		            map2.tileServerUrl = actions[3];
		        }
		        else if (action=="serverextentupdated") {
		            validResponse = true;
		            if (map2.overviewId!="") {
		                var ov_id = map2.overviewId;
                        ov2 = Overviews[ov_id];
                        if (ov2!=null) window.setTimeout("Overviews['" + ov_id + "'].getAOIBox();", 1);
                        ov2 = null;
                    }
		        }
		        map2.divObject.style.cursor = map2.cursor;  
	            map2=null;
		        break;
		    case "page":
		        page2 = Pages[controlID];
            if (action=="changeExtent") {
		            validResponse = true;
		        } 
		        else if (action=="shiftgrid") {
		            validResponse = true;
		        }
		        else if (action=="serverextentupdated") {
		            validResponse = true;
		        }
		        else if (action=="updateimage") {
		            validResponse = true;
		            if (actions[3].toLowerCase()=="null") actions[3] = "";
		            updateImage(actions[3]);
		        }
		        page2.divObject.style.cursor = page2.cursor;
	            page2=null;
		        break;
		    case "overviewmap":
		        ov2 = Overviews[controlID];
		        if (action=="aoiextent") {
		            validResponse = true;
                    window.setTimeout("Overviews['" + controlID + "'].parseUpdateString('" + responseItem + "');",0);
                }
	            ov2=null;
		        break;
		        
		    case "maptips":
		        maptipString = escape(responseItem);
		        validResponse = true;		        
   	            window.setTimeout("MapTipCollections['" + controlID + "'].addMapTips('" + maptipString + "');", 1000);
		        break;
		        
		    case "taskresults":
	            if (action=="content")
	            {
	                if ((actions.length==6 && esriTaskResultsCancelledJobs[actions[4]]==null) || actions.length==4)
	                {
	                    validResponse = true;
		                o = document.getElementById(controlID);
		                if (o != null) o.outerHTML = actions[3];
		            }
		            else if (actions.length==6)
		            {
		                // remove node if the job was cancelled
		                validResponse=true;
                        window.setTimeout("TreeViewPlusObjects['" + controlID + "'].clearNode('" + actions[5] + "');",0);
                        return; // ignore the map.Refresh stuff.
		            }
		        }
		        if (action=="showcallout")
		        {
		            validResponse = true;
		            showCallout(actions[3],actions[4],actions[5],actions[6]);
		        }
		        break;
		        
		    case "task":
		        break;
		    case "magnifier":
		        mag2 = FloatingPanels[controlID];
		        mag3 = esriMagnifiers[controlID];
		        map2 = Maps[mag3.mapBuddyId];
		        if (action=="mapimage") 
		        {
		            validResponse = true;
                	var imgObj = document.getElementById(actions[3]);
                	if (imgObj!=null) 
                	{
                		imgObj.src = actions[4];
                		imgObj.style.visibility = "visible";
                		if (actions.length>5) 
                		{
                    		if (mag2!=null) mag2.extentString = actions[5];
                    		var magcoord0 = map2.setDecimalDelimiter(Math.round(map2.setDecimalDelimiter(actions[5],esriJavaScriptDecimalDelimiter)* 1000)/1000);
                    		var magcoord1 = map2.setDecimalDelimiter(Math.round(map2.setDecimalDelimiter(actions[6],esriJavaScriptDecimalDelimiter)* 1000)/1000);
                    		var magcoord2 = map2.setDecimalDelimiter(Math.round(map2.setDecimalDelimiter(actions[7],esriJavaScriptDecimalDelimiter)* 1000)/1000);
                    		var magcoord3 = map2.setDecimalDelimiter(Math.round(map2.setDecimalDelimiter(actions[8],esriJavaScriptDecimalDelimiter)* 1000)/1000);
                			extString = "Extent: " + magcoord0 + ", " + magcoord1 + ", " + magcoord2 + ", " + magcoord3;
                			imgObj.alt = extString;
                			imgObj.title = extString;
                		}
                	}
                	if (mag3!=null) {
                        if (mag3.magnifierAOI!=null)
                            mag3.magnifierAOI.style.visibility = "hidden";
                        if (mag3.magnifierCrosshair!=null)
                            mag3.magnifierCrosshair.style.visibility = "hidden";
                    }
		        }
		        break;
		    case "measure":
		        validResponse = true;
		        if (actions[2]=="addpoint" || actions[2]=="coordinates") {
		            if (m_measureDisplay!=null) {
			            var md = document.getElementById(m_measureDisplay);
			            if (md!=null) md.innerHTML = actions[3];
			        }
		        }
		        break;
		    default:
		        break;
		}
		if (!validResponse)
		{
            if (action=="content") {
		        // content...response: ///:::elementId:::content:::html_content ....///=any character as place holder to split triple colons
	            validResponse = true;
		        o = document.getElementById(actions[1]);
		        if (o != null)
		        {
                    o.outerHTML=actions[3];
		        }
	        }
            else if (action=="innercontent") {
		        // content...response: ///:::elementId:::content:::html_content ....///=any character as place holder to split triple colons
	            validResponse = true;
		        o = document.getElementById(actions[1]);
		        if (o != null)
		        {
                    o.innerHTML=actions[3];
		        }
	        }
	        else if (action=="image")
	        {
	            validResponse = true;
		        o = document.images[actions[1]];
		        if (o != null)
		        {
		            o.src = actions[3];
		        }
		        else alert (actions[1] + " was null");
	        } 		
	        else if (action=="javascript") {
	            // javascript... response: ///:::///:::javascript:::javascript_content ... ///=any character as place holder to split triple colons
	            validResponse = true;
		        eval(actions[3]);
	        }
	        else if(response.length>0)
	        {
	            alert(response + "\nContext: " + context);
	        }
		}
		if (validResponse)
		{
		    //lastResponseReceivedTime=new Date();
		    validResponse=false;
		}
	}
}
